{"version":3,"file":"app.js","mappings":"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","sources":["webpack://dbktheme/./js/src/lib/dbk-app/app.js","webpack://dbktheme/./js/src/modules/booking.js","webpack://dbktheme/./js/src/modules/copy-to-clipboard.js","webpack://dbktheme/./js/src/modules/expandable-items.js","webpack://dbktheme/./js/src/modules/front-page.js","webpack://dbktheme/./js/src/modules/global.js","webpack://dbktheme/./js/src/modules/gravity-forms.js","webpack://dbktheme/./js/src/modules/large-overlay.js","webpack://dbktheme/./js/src/modules/mews.js","webpack://dbktheme/./js/src/modules/notification-bar.js","webpack://dbktheme/./js/src/modules/number-controls.js","webpack://dbktheme/./js/src/modules/overlays.js","webpack://dbktheme/./js/src/modules/parallax-backgrounds.js","webpack://dbktheme/./js/src/modules/popins.js","webpack://dbktheme/./js/src/modules/responsive-video.js","webpack://dbktheme/./js/src/modules/scroll-animations.js","webpack://dbktheme/./js/src/modules/scroll-map.js","webpack://dbktheme/./js/src/modules/scroll-to-top.js","webpack://dbktheme/./js/src/modules/sliders.js","webpack://dbktheme/./js/src/modules/sticky-header.js","webpack://dbktheme/./js/src/modules/sticky-nav.js","webpack://dbktheme/./js/src/modules/tabs.js","webpack://dbktheme/./js/src/plugins/bootstrap-modules/popovers.js","webpack://dbktheme/./js/src/plugins/bootstrap-modules/tabs.js","webpack://dbktheme/./js/src/plugins/bootstrap-modules/tooltips.js","webpack://dbktheme/./js/src/plugins/lightpick/lightpick.js","webpack://dbktheme/./js/src/plugins/modernizr/modernizr-custom.js","webpack://dbktheme/./js/src/plugins/nivo-lightbox/nivo-lightbox.min.js","webpack://dbktheme/./node_modules/gsap/AttrPlugin.js","webpack://dbktheme/./node_modules/gsap/BezierPlugin.js","webpack://dbktheme/./node_modules/gsap/CSSPlugin.js","webpack://dbktheme/./node_modules/gsap/DirectionalRotationPlugin.js","webpack://dbktheme/./node_modules/gsap/EasePack.js","webpack://dbktheme/./node_modules/gsap/RoundPropsPlugin.js","webpack://dbktheme/./node_modules/gsap/TimelineLite.js","webpack://dbktheme/./node_modules/gsap/TimelineMax.js","webpack://dbktheme/./node_modules/gsap/TweenLite.js","webpack://dbktheme/./node_modules/gsap/TweenMax.js","webpack://dbktheme/./node_modules/gsap/TweenMaxBase.js","webpack://dbktheme/./node_modules/jquery-easing/dist/jquery.easing.1.3.umd.js","webpack://dbktheme/./node_modules/jquery/dist/jquery.js","webpack://dbktheme/./node_modules/js-cookie/src/js.cookie.js","webpack://dbktheme/./node_modules/leaflet/dist/leaflet-src.js","webpack://dbktheme/./node_modules/moment/locale/af.js","webpack://dbktheme/./node_modules/moment/locale/ar-dz.js","webpack://dbktheme/./node_modules/moment/locale/ar-kw.js","webpack://dbktheme/./node_modules/moment/locale/ar-ly.js","webpack://dbktheme/./node_modules/moment/locale/ar-ma.js","webpack://dbktheme/./node_modules/moment/locale/ar-sa.js","webpack://dbktheme/./node_modules/moment/locale/ar-tn.js","webpack://dbktheme/./node_modules/moment/locale/ar.js","webpack://dbktheme/./node_modules/moment/locale/az.js","webpack://dbktheme/./node_modules/moment/locale/be.js","webpack://dbktheme/./node_modules/moment/locale/bg.js","webpack://dbktheme/./node_modules/moment/locale/bm.js","webpack://dbktheme/./node_modules/moment/locale/bn-bd.js","webpack://dbktheme/./node_modules/moment/locale/bn.js","webpack://dbktheme/./node_modules/moment/locale/bo.js","webpack://dbktheme/./node_modules/moment/locale/br.js","webpack://dbktheme/./node_modules/moment/locale/bs.js","webpack://dbktheme/./node_modules/moment/locale/ca.js","webpack://dbktheme/./node_modules/moment/locale/cs.js","webpack://dbktheme/./node_modules/moment/locale/cv.js","webpack://dbktheme/./node_modules/moment/locale/cy.js","webpack://dbktheme/./node_modules/moment/locale/da.js","webpack://dbktheme/./node_modules/moment/locale/de-at.js","webpack://dbktheme/./node_modules/moment/locale/de-ch.js","webpack://dbktheme/./node_modules/moment/locale/de.js","webpack://dbktheme/./node_modules/moment/locale/dv.js","webpack://dbktheme/./node_modules/moment/locale/el.js","webpack://dbktheme/./node_modules/moment/locale/en-au.js","webpack://dbktheme/./node_modules/moment/locale/en-ca.js","webpack://dbktheme/./node_modules/moment/locale/en-gb.js","webpack://dbktheme/./node_modules/moment/locale/en-ie.js","webpack://dbktheme/./node_modules/moment/locale/en-il.js","webpack://dbktheme/./node_modules/moment/locale/en-in.js","webpack://dbktheme/./node_modules/moment/locale/en-nz.js","webpack://dbktheme/./node_modules/moment/locale/en-sg.js","webpack://dbktheme/./node_modules/moment/locale/eo.js","webpack://dbktheme/./node_modules/moment/locale/es-do.js","webpack://dbktheme/./node_modules/moment/locale/es-mx.js","webpack://dbktheme/./node_modules/moment/locale/es-us.js","webpack://dbktheme/./node_modules/moment/locale/es.js","webpack://dbktheme/./node_modules/moment/locale/et.js","webpack://dbktheme/./node_modules/moment/locale/eu.js","webpack://dbktheme/./node_modules/moment/locale/fa.js","webpack://dbktheme/./node_modules/moment/locale/fi.js","webpack://dbktheme/./node_modules/moment/locale/fil.js","webpack://dbktheme/./node_modules/moment/locale/fo.js","webpack://dbktheme/./node_modules/moment/locale/fr-ca.js","webpack://dbktheme/./node_modules/moment/locale/fr-ch.js","webpack://dbktheme/./node_modules/moment/locale/fr.js","webpack://dbktheme/./node_modules/moment/locale/fy.js","webpack://dbktheme/./node_modules/moment/locale/ga.js","webpack://dbktheme/./node_modules/moment/locale/gd.js","webpack://dbktheme/./node_modules/moment/locale/gl.js","webpack://dbktheme/./node_modules/moment/locale/gom-deva.js","webpack://dbktheme/./node_modules/moment/locale/gom-latn.js","webpack://dbktheme/./node_modules/moment/locale/gu.js","webpack://dbktheme/./node_modules/moment/locale/he.js","webpack://dbktheme/./node_modules/moment/locale/hi.js","webpack://dbktheme/./node_modules/moment/locale/hr.js","webpack://dbktheme/./node_modules/moment/locale/hu.js","webpack://dbktheme/./node_modules/moment/locale/hy-am.js","webpack://dbktheme/./node_modules/moment/locale/id.js","webpack://dbktheme/./node_modules/moment/locale/is.js","webpack://dbktheme/./node_modules/moment/locale/it-ch.js","webpack://dbktheme/./node_modules/moment/locale/it.js","webpack://dbktheme/./node_modules/moment/locale/ja.js","webpack://dbktheme/./node_modules/moment/locale/jv.js","webpack://dbktheme/./node_modules/moment/locale/ka.js","webpack://dbktheme/./node_modules/moment/locale/kk.js","webpack://dbktheme/./node_modules/moment/locale/km.js","webpack://dbktheme/./node_modules/moment/locale/kn.js","webpack://dbktheme/./node_modules/moment/locale/ko.js","webpack://dbktheme/./node_modules/moment/locale/ku.js","webpack://dbktheme/./node_modules/moment/locale/ky.js","webpack://dbktheme/./node_modules/moment/locale/lb.js","webpack://dbktheme/./node_modules/moment/locale/lo.js","webpack://dbktheme/./node_modules/moment/locale/lt.js","webpack://dbktheme/./node_modules/moment/locale/lv.js","webpack://dbktheme/./node_modules/moment/locale/me.js","webpack://dbktheme/./node_modules/moment/locale/mi.js","webpack://dbktheme/./node_modules/moment/locale/mk.js","webpack://dbktheme/./node_modules/moment/locale/ml.js","webpack://dbktheme/./node_modules/moment/locale/mn.js","webpack://dbktheme/./node_modules/moment/locale/mr.js","webpack://dbktheme/./node_modules/moment/locale/ms-my.js","webpack://dbktheme/./node_modules/moment/locale/ms.js","webpack://dbktheme/./node_modules/moment/locale/mt.js","webpack://dbktheme/./node_modules/moment/locale/my.js","webpack://dbktheme/./node_modules/moment/locale/nb.js","webpack://dbktheme/./node_modules/moment/locale/ne.js","webpack://dbktheme/./node_modules/moment/locale/nl-be.js","webpack://dbktheme/./node_modules/moment/locale/nl.js","webpack://dbktheme/./node_modules/moment/locale/nn.js","webpack://dbktheme/./node_modules/moment/locale/oc-lnc.js","webpack://dbktheme/./node_modules/moment/locale/pa-in.js","webpack://dbktheme/./node_modules/moment/locale/pl.js","webpack://dbktheme/./node_modules/moment/locale/pt-br.js","webpack://dbktheme/./node_modules/moment/locale/pt.js","webpack://dbktheme/./node_modules/moment/locale/ro.js","webpack://dbktheme/./node_modules/moment/locale/ru.js","webpack://dbktheme/./node_modules/moment/locale/sd.js","webpack://dbktheme/./node_modules/moment/locale/se.js","webpack://dbktheme/./node_modules/moment/locale/si.js","webpack://dbktheme/./node_modules/moment/locale/sk.js","webpack://dbktheme/./node_modules/moment/locale/sl.js","webpack://dbktheme/./node_modules/moment/locale/sq.js","webpack://dbktheme/./node_modules/moment/locale/sr-cyrl.js","webpack://dbktheme/./node_modules/moment/locale/sr.js","webpack://dbktheme/./node_modules/moment/locale/ss.js","webpack://dbktheme/./node_modules/moment/locale/sv.js","webpack://dbktheme/./node_modules/moment/locale/sw.js","webpack://dbktheme/./node_modules/moment/locale/ta.js","webpack://dbktheme/./node_modules/moment/locale/te.js","webpack://dbktheme/./node_modules/moment/locale/tet.js","webpack://dbktheme/./node_modules/moment/locale/tg.js","webpack://dbktheme/./node_modules/moment/locale/th.js","webpack://dbktheme/./node_modules/moment/locale/tk.js","webpack://dbktheme/./node_modules/moment/locale/tl-ph.js","webpack://dbktheme/./node_modules/moment/locale/tlh.js","webpack://dbktheme/./node_modules/moment/locale/tr.js","webpack://dbktheme/./node_modules/moment/locale/tzl.js","webpack://dbktheme/./node_modules/moment/locale/tzm-latn.js","webpack://dbktheme/./node_modules/moment/locale/tzm.js","webpack://dbktheme/./node_modules/moment/locale/ug-cn.js","webpack://dbktheme/./node_modules/moment/locale/uk.js","webpack://dbktheme/./node_modules/moment/locale/ur.js","webpack://dbktheme/./node_modules/moment/locale/uz-latn.js","webpack://dbktheme/./node_modules/moment/locale/uz.js","webpack://dbktheme/./node_modules/moment/locale/vi.js","webpack://dbktheme/./node_modules/moment/locale/x-pseudo.js","webpack://dbktheme/./node_modules/moment/locale/yo.js","webpack://dbktheme/./node_modules/moment/locale/zh-cn.js","webpack://dbktheme/./node_modules/moment/locale/zh-hk.js","webpack://dbktheme/./node_modules/moment/locale/zh-mo.js","webpack://dbktheme/./node_modules/moment/locale/zh-tw.js","webpack://dbktheme/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://dbktheme/./node_modules/moment/moment.js","webpack://dbktheme/./node_modules/scrollmagic-plugin-gsap/index.js","webpack://dbktheme/./node_modules/scrollmagic/scrollmagic/uncompressed/ScrollMagic.js","webpack://dbktheme/./node_modules/slick-carousel/slick/slick.js","webpack://dbktheme/./node_modules/waypoints/lib/jquery.waypoints.js","webpack://dbktheme/./node_modules/waypoints/lib/shortcuts/inview.js","webpack://dbktheme/webpack/bootstrap","webpack://dbktheme/webpack/runtime/compat get default export","webpack://dbktheme/webpack/runtime/define property getters","webpack://dbktheme/webpack/runtime/global","webpack://dbktheme/webpack/runtime/harmony module decorator","webpack://dbktheme/webpack/runtime/hasOwnProperty shorthand","webpack://dbktheme/webpack/runtime/make namespace object","webpack://dbktheme/webpack/runtime/node module decorator","webpack://dbktheme/webpack/runtime/publicPath","webpack://dbktheme/./js/src/app.js","webpack://dbktheme/./sass/app.scss"],"sourcesContent":["/* ========================================================================\n * DOM-based Routing\n * Based on http://goo.gl/EUTi53 by Paul Irish\n *\n * Only fires on body classes that match. If a body class contains a dash,\n * replace the dash with an underscore when adding it to the object below.\n *\n * ======================================================================== */\n\nvar App = function(namespace) {\n    var self = this;\n    var namespace = namespace;\n\n    this.fire = function(func, args) {\n        var fire;\n\n        fire = func !== '';\n        fire = fire && namespace[func];\n\n        if (fire) {\n            namespace[func](args);\n        }\n    }\n\n    this.loadEvents = function() {\n        // Fire common init JS\n        self.fire('global');\n\n        // Fire page-specific init JS, and then finalize JS\n        $.each(document.body.className.replace(/-/g, '_').replace('page_template_', '').split(/\\s+/), function(i, classnm) {\n          self.fire(classnm);\n        });\n    }\n};\n\nmodule.exports = App;","const classFieldDropdownVisible = 'field__dropdown--visible';\n\n$('.booking-bar .field__input').on('click', function () {\n    let $booking = $(this).closest('.booking-bar'),\n        $dropdown = $(this).siblings('.field__dropdown');\n\n    // show/hide field dropdown\n    if ($dropdown.length > 0) {\n        if ($dropdown.hasClass(classFieldDropdownVisible)) {\n            $dropdown.removeClass(classFieldDropdownVisible);\n        } else {\n            $booking.find('.field__dropdown').removeClass(classFieldDropdownVisible);\n            $dropdown.addClass(classFieldDropdownVisible);\n        }\n    }\n});\n\n$(document).on('click', function (e) {\n    // close popup when clicking outside window\n    if (!$(e.target).closest('.field').length > 0) {\n        $('.field__dropdown').each(function () {\n            $(this).removeClass(classFieldDropdownVisible);\n        });\n    }\n});\n\n\n// datepicker\n$('.booking-bar').each(function () {\n    let $form = $(this),\n        $arrivalLabel = $(this).find('.booking-bar__arrival'),\n        $departureLabel = $(this).find('.booking-bar__departure'),\n        checkinDate = moment(),\n        footerHTML = $form.find('input.datepicker ~ .datepicker-footer').html();\n\n    if (typeof footerHTML === 'undefined') {\n        footerHTML = '';\n    }\n\n    var arrival;\n    var departure;\n\n    var picker = new Lightpick({\n        field: $form.find('.field--arrival .datepicker')[0],\n        secondField: $form.find('.field--departure .datepicker')[0],\n        repick: true,\n        numberOfColumns: 2,\n        numberOfMonths: 2,\n        minDate: checkinDate,\n        dropdowns: {\n            years: {\n                min: moment().get('year'),\n                max: moment().add('5', 'years').get('year'),\n            },\n            months: true,\n        },\n        footer: footerHTML,\n        onDayRender: (div, date) => { },\n        onOpen: () => {\n            // close all opened field dropdowns\n            $('.field__dropdown').each(function () {\n                $(this).removeClass(classFieldDropdownVisible);\n            });\n            $form.find('.field--arrival').addClass('field--dropdown-visible');\n        },\n        onSelect: (start, end) => {\n            if (start) {\n                arrival = start.toDate();\n                $arrivalLabel.text(start.format('ddd DD.MM.YY'));\n            }\n            if (end) {\n                departure = end.toDate();\n                $departureLabel.text(end.format('ddd DD.MM.YY'));\n            }\n        },\n        onClose: () => {\n            $form.find('.field--arrival').removeClass('field--dropdown-visible');\n        }\n    });\n\n    $form.submit(function (e) {\n        e.preventDefault();\n\n        var form = $(this);\n        var mews_id = form.find('input[name=hotel]').val();\n        var locale = form.find('input[name=locale]').val();\n\n        Mews.Distributor({\n            configurationIds: [mews_id]\n        }, function (distributor) {\n            // Some default settings\n            distributor.setLanguageCode(locale);\n\n            // see if we have arrive and depart\n            if (arrival) {\n                console.log('setting start date');\n                console.log(arrival);\n                distributor.setStartDate(arrival);\n            }\n            if (departure) {\n                console.log('setting depart date');\n                console.log(departure);\n                distributor.setEndDate(departure);\n            }\n\n            distributor.open();\n            distributor.showRooms(); // if room_id is added remove this line of code\n\n        });\n\n        return false;\n    });\n});\n","// copy page url to clipboard\nfunction copyToClipboard(string) {\n    // for reference: https://stackoverflow.com/questions/34045777/copy-to-clipboard-using-javascript-in-ios\n\n    let dummyInput,\n        result;\n\n    try {\n        dummyInput = document.createElement('input');\n        dummyInput.setAttribute('readonly', true);\n        dummyInput.setAttribute('contenteditable', true);\n        dummyInput.style.position = 'fixed'; // prevent jumping to bottom (iOS)\n        dummyInput.style.top = 50+'%'; // prevent jumping to bottom (iOS)\n        dummyInput.value = string;\n\n        document.body.appendChild(dummyInput);\n\n        dummyInput.focus();\n        dummyInput.select();\n\n        const range = document.createRange();\n        range.selectNodeContents(dummyInput);\n\n        const selection = window.getSelection();\n        selection.removeAllRanges();\n        selection.addRange(range);\n\n        dummyInput.setSelectionRange(0, dummyInput.value.length);\n        result = document.execCommand('copy');\n    } catch (err) {\n        console.error(err);\n        result = null;\n    } finally {\n        document.body.removeChild(dummyInput);\n    }\n}\n\n$('.social-share__link--url').on('click', function() {\n    let $link = $(this),\n        classShowTooltip = 'social-share__link--show-tooltip',\n        currentUrl = window.location.href;\n\n    copyToClipboard(currentUrl);\n\n    if (!$link.hasClass(classShowTooltip)) {\n        $link.addClass(classShowTooltip);\n\n        setTimeout( function() {\n            $link.removeClass(classShowTooltip);\n        }, 1000);\n    }\n});\n","// expandable items\n$('.expandable-items .item .item__toggle').on( 'click', function(e) {\n    e.preventDefault();\n\n    let $toggle = $(this),\n        $item = $toggle.closest('.item'),\n        toggledClass = 'item--toggled',\n        $content = $toggle.siblings('.item__content');\n\n    if ( $item.hasClass(toggledClass) ) {\n        $item.removeClass(toggledClass);\n        $content.stop().slideUp( 150, 'easeInOutCubic' );\n    } else {\n        $item.addClass(toggledClass);\n        $content.stop().slideDown( 150, 'easeInOutCubic' );\n    }\n});\n\n// expand pre-toggled expandable items on pageload\n$('.expandable-items .item.item--toggled').each( function() {\n    let $content = $(this).find('.item__content');\n\n    $content.show();\n});","module.exports = function () {\n    // front-page functionality goes here\n\n    require('./scroll-map.js');\n};","module.exports = function () {\n    // global functionality goes here\n\n    const $body = $('body'),\n        $header = $('header.masthead');\n\n    $body.addClass('jsenabled');\n\n\n    // check if browser is IE - if true, add body class\n    const isIE = navigator.appName === 'Microsoft Internet Explorer' ||\n        !!(navigator.userAgent.match(/Trident/) ||\n            navigator.userAgent.match(/rv:11/)) ||\n        (typeof $.browser !== \"undefined\" && $.browser.msie === 1);\n\n    if (isIE) {\n        $body.addClass('browser-ie');\n    }\n\n\n    // push gtm-event data-values on anchors to datalayer\n    $body.on('click', '[data-gtm-event]', function () {\n        let gtm_event = $(this).data('gtm-event');\n        let page_url = $(location).attr('href');\n\n        // console.log({'dbk_category' : 'click_event', 'dbk_event' : gtm_event, 'dbk_url' : page_url }); // development\n\n        if (typeof dataLayer !== 'undefined') {\n            dataLayer.push({'dbk_category': 'click_event', 'dbk_event': gtm_event, 'dbk_url': page_url}); // production\n        }\n    });\n\n\n    // prevent disabled buttons to execute default actions\n    $('.btn-disabled').click(function (e) {\n        e.preventDefault();\n    });\n\n\n    // unfocus links after click\n    $('a, button').click(function () {\n        $(this).blur();\n    });\n\n    $('.mews-open').on('click', function(){\n        \n        var mews_id = $(this).data('mews-id');\n        var locale = $(this).data('locale');  \n        \n        Mews.Distributor({\n            configurationIds: [mews_id]\n        }, function (distributor) {\n\n            distributor.setLanguageCode(locale);     \n            distributor.open(); \n        });\n    }); \n\n    // init lightbox\n    $('a.lightbox').nivoLightbox({\n        afterShowLightbox: function () {\n            let $iframe = $('.nivo-lightbox-content > iframe'),\n                src = $iframe.attr('src');\n\n            $iframe.attr('src', src + '?autoplay=1&rel=0&disablekb=1&fs=0');\n        }\n    });\n\n\n    // init tooltips\n    $body.tooltip({\n        selector: '[data-toggle=\"tooltip\"]',\n        container: 'body'\n    });\n\n    // init popovers\n    $body.popover({\n        // trigger: 'click',\n        selector: '[data-toggle=\"popover\"]',\n        trigger: 'hover',\n        html: true,\n        template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n    });\n\n\n    // when a link is clicked with href attribute starting with #, scroll that shit smoothly (if target exists)\n    $('a[href^=\"#\"]').click(function (e) {\n        e.preventDefault();\n        let $this = $(this);\n        let target = $(this).attr('href');\n        let scrollOffset = 0;\n\n        if (viewport().width > 580) {\n            scrollOffset = scrollOffset + $header.outerHeight();\n        }\n\n        if ($this.data('extra-scroll-offset')) {\n            scrollOffset = scrollOffset + $(this).data('extra-scroll-offset');\n        }\n\n        if ($('.sticky-nav').length > 0) {\n            scrollOffset = scrollOffset + ($('.sticky-nav').outerHeight() / 2);\n        }\n\n        // if target exists\n        if ($(target).length > 0) {\n\n            // if target has top margin, add half of it to scroll offset\n            let targetMargin = parseInt($(target).css('marginTop'));\n\n            if (targetMargin > 0) {\n                scrollOffset = scrollOffset + (targetMargin / 2);\n            }\n\n            if ($(target).hasClass('magic-map')) {\n                // if magic scroll map scroll to end of animation\n                let $target = $(target).closest('.scrollmagic-pin-spacer');\n\n                scrollOffset = $target.outerHeight() - viewport().height;\n\n                $('html, body').stop().animate({\n                    scrollTop: $target.offset().top + scrollOffset\n                }, 1000, 'easeInOutCubic', function () {\n                    $this.blur();\n                });\n\n            } else {\n                // normal behavior\n                $('html, body').stop().animate({\n                    scrollTop: $(target).offset().top - scrollOffset\n                }, 1000, 'easeInOutCubic', function () {\n                    $this.blur();\n                });\n            }\n        }\n    });\n\n\n    // disable hero-video with URL variable\n    if (window.location.search.indexOf('no_video=1') >= 0) {\n        $('.section__background-video').hide();\n    }\n\n\n    // insert check icon elements to ul.list-checked in content-wrapper\n    $('.content-wrapper .list-checked > li').each(function () {\n        $(this).prepend('<i class=\"item-icon far fa-check\"></i>');\n    });\n\n\n    // wrap table elements inside .content areas in .table-wrapper div\n    $('.content table').each(function() {\n        $(this).wrap('<div class=\"table-wrapper\"></div>');\n    });\n\n\n    // section background video - audio toggle\n    $('.section__background-video .audio-toggle').on('click', function(e) {\n        e.preventDefault();\n\n        let $toggle = $(this),\n            $wrapper = $toggle.closest('.section__background-video'),\n            classToggled = 'audio-toggle--sound-on';\n\n        // check if youtube or vimeo\n        if ($wrapper.attr('class').indexOf('youtube') >= 0) {\n            // video is youtube\n            // toggling sound is handled in iframe api script code\n\n            if ($toggle.hasClass(classToggled)) {\n                $toggle.removeClass(classToggled);\n            } else {\n                $toggle.addClass(classToggled);\n            }\n        } else if ($wrapper.attr('class').indexOf('vimeo') >= 0) {\n            // video is vimeo\n\n            let $player = $wrapper.find('video.player__inner');\n\n            if ($toggle.hasClass(classToggled)) {\n                $toggle.removeClass(classToggled);\n                $player.prop('muted', true);\n            } else {\n                $toggle.addClass(classToggled);\n                $player.prop('muted', false);\n            }\n        }\n\n        $toggle.blur();\n    });\n\n\n    // DBK cookie law settings toggle\n    $body.on('click', '#dbk-cookie-law .btn-show-cookie-setting', function() {\n        let $toggle = $(this),\n            $settings = $(this).closest('#dbk-cookie-law').find('.cookies-notification__bottom'),\n            classToggled = 'btn-show-cookie-setting--toggled';\n\n        if ($toggle.hasClass(classToggled)) {\n            $toggle.removeClass(classToggled);\n            $settings.stop().slideUp(150);\n        } else {\n            $toggle.addClass(classToggled);\n            $settings.stop().slideDown(150);\n        }\n    });\n\n\n    // toggle languages dropdown on mobile\n    $('#toggle-lang-menu-mobile').on('click', function() {\n        let $dropdown = $(this).siblings('.mobile-bottom-bar__languages-dropdown'),\n            classDropdownVisible = 'mobile-bottom-bar__languages-dropdown--visible';\n\n        if ($dropdown.hasClass(classDropdownVisible)) {\n            $dropdown.removeClass(classDropdownVisible);\n        } else {\n            $dropdown.addClass(classDropdownVisible);\n        }\n    });\n\n\n    // insert sub-menu-toggles in primary nav in nav-bar\n    let $insert = $('<span class=\"sub-menu-toggle\"><i class=\"far fa-plus\"></i></span>');\n    $insert.insertBefore('.menu-overlay__nav--primary .menu > .menu-item-has-children .sub-menu');\n\n    $('.sub-menu-toggle').click(function () {\n        let $parent = $(this).closest('.menu-item-has-children');\n        let $submenu = $parent.find('.sub-menu');\n\n        // collapse other shown sub-menu's when new sub-menu is toggled\n        $parent.siblings().each(function () {\n            if ($(this).hasClass('sub-menu-toggled')) {\n                $(this).removeClass('sub-menu-toggled');\n                $(this).find('.sub-menu').stop().slideUp(300, 'easeInOutCubic');\n                $(this).find('.sub-menu-toggle').html('<i class=\"far fa-plus\"></i>');\n            }\n        });\n\n        // show/hide sub-menu\n        if ($parent.hasClass('sub-menu-toggled')) {\n            $parent.removeClass('sub-menu-toggled');\n            $submenu.stop().slideUp(300, 'easeInOutCubic');\n            $(this).html('<i class=\"far fa-plus\"></i>');\n        } else {\n            $parent.addClass('sub-menu-toggled');\n            $submenu.stop().slideDown(300, 'easeInOutCubic');\n            $(this).html('<i class=\"far fa-minus\"></i>');\n        }\n    });\n\n\n    // load extra JS parts\n    require('./gravity-forms');\n    require('./sticky-header');\n    require('./sticky-nav');\n    require('./overlays');\n    require('./parallax-backgrounds');\n    require('./scroll-to-top');\n    require('./sliders');\n    require('./scroll-animations');\n    require('./booking');\n    require('./number-controls');\n    require('./copy-to-clipboard');\n    require('./tabs');\n    require('./expandable-items');\n    require('./responsive-video');\n    require('./popins');\n    require('./mews');\n    require('./notification-bar');\n    require('./large-overlay');\n\n};","jQuery(document).ready(function () {\n\n    // replace form required asterisks with lock icons (replace with icon of choice)\n    $('.gform_wrapper .gfield_required').each(function () {\n        $(this).html('<i class=\"fas fa-lock\"></i>');\n    });\n\n\n    // insert dropdown icons to gform select elements\n    $('.gform_wrapper .ginput_container_select').each(function () {\n        $(this).append('<div class=\"field_icon\"><i class=\"fas fa-sort\"></i></div>');\n    });\n\n\n    // insert datepicker icons to gform date elements\n    $('.gform_wrapper .ginput_container_date').each(function () {\n        $(this).append('<div class=\"field_icon\"><i class=\"far fa-calendar-alt\"></i></div>');\n    });\n\n\n    // insert error icons to gform field error elements\n    $('.gform_wrapper .gfield.gfield_error .ginput_container:not(.ginput_container_checkbox):not(.ginput_container_radio):not(.ginput_container_select)').each(function () {\n        $(this).append('<div class=\"error_icon\"><i class=\"far fa-times\"></i></div>');\n    });\n\n\n    // add loader and disabled class to gform submits to prevent multiple submits\n    $('.gform_wrapper form').submit(function (e) {\n        let $submit = $(this).closest('.gform_wrapper').find('.gform_footer *[type=\"submit\"]');\n\n        if (!$submit.hasClass('btn-disabled')) {\n            $submit.addClass('btn-disabled').prepend('<i class=\"icon-left fas fa-spinner fa-spin\"></i>').blur();\n        } else {\n            e.preventDefault();\n        }\n    });\n\n\n    // hide .gform_heading if .gform_description is only child and is empty\n    $('.gform_wrapper .gform_heading .gform_description').each(function () {\n        let $heading = $(this).closest('.gform_heading');\n        let $description = $(this);\n\n        // if description is empty, hide it\n        if ($description.html() === '') {\n            $description.hide();\n\n            // if description is empty, and only child, hide heading\n            if ($description.siblings().size() === 0) {\n                $heading.hide();\n            }\n        }\n    });\n\n});","const $overlay = $('.large-overlay'),\n    classOverlayHidden = 'large-overlay--hidden',\n    classOverlayHasCookie = 'large-overlay--has-cookie';\n\nif ($overlay.length > 0) {\n\n    if ($overlay.hasClass(classOverlayHasCookie)) {\n        // check if overlay has cookie\n\n        let cookieHash = 'overlay_'+ $overlay.data('cookie-hash'), // based on overlay content, so if content changes, overlay will be shown again\n            cookieDuration = $overlay.data('cookie-duration');\n\n        if (Cookies.get(cookieHash)) {\n            // check if cookie exists - if so, dont show overlay and remove from DOM completely\n            $overlay.remove();\n        } else {\n            // else, show overlay and set cookie\n            $overlay.removeClass(classOverlayHidden);\n\n            if (typeof cookieDuration !== 'undefined' && typeof cookieHash !== 'undefined') {\n                setCookie(cookieHash, 1, cookieDuration);\n            }\n        }\n    } else {\n        // else, show overlay\n        $overlay.removeClass(classOverlayHidden);\n    }\n\n    $overlay.find('button[class*=\"close\"]').on('click', function () {\n        $overlay.addClass(classOverlayHidden);\n    });\n}\n\n","jQuery(document).ready(function () {\n\n    var mews_forms = $('.booking-form-mews');\n\n    if (0 < mews_forms.length && window.location.search.indexOf('mewsDistributorOpened') >= 0) {\n        var mews_form = $(mews_forms[0]);\n\n        var mews_id = mews_form.find('input[name=hotel]').val();\n        var locale = mews_form.find('input[name=locale]').val();\n\n        Mews.Distributor({\n            configurationIds: [mews_id]\n        }, function (distributor) {\n            // Some default settings\n            distributor.setLanguageCode(locale);\n            distributor.open();\n\n        }, {\n            dataBaseUrl: 'https://api.mews.com' // set to https://api.mews-demo.com for testing\n        });\n    }\n});","const $bar = $('.notification-bar'),\n    $menu = $('.menu-overlay'),\n    $search = $('.search-overlay'),\n    classBarHidden = 'notification-bar--hidden';\n\nif ($bar.length > 0) {\n    setTimeout(setBarHeight, 100);\n    $(window).on('resize', setBarHeight);\n\n    $('.notification-bar__close').on('click', function () {\n        $bar.addClass(classBarHidden);\n        $menu.css('marginTop', 0); // to offset menu overlay contents when notification is visible\n        $search.css('marginTop', 0); // to offset search overlay contents when notification is visible\n    });\n}\n\nfunction setBarHeight () {\n    $bar.css('height', 'auto');\n\n    let barHeight = $bar.outerHeight();\n\n    $bar.css('height', barHeight); // setting height for animating to zero when hidden\n    $menu.css('marginTop', barHeight); // to offset menu overlay contents when notification is visible\n    $search.css('marginTop', barHeight); // to offset search overlay contents when notification is visible\n}\n","// on pageload\n$('.number-controls').each(function () {\n    let $target = $('#'+ $(this).data('target-id')),\n        $targetLabel = $('#'+ $(this).data('target-label-id'));\n\n    if ($target.length > 0) {\n        let value = parseInt($target.html()),\n            min = parseInt($(this).data('min')),\n            max = parseInt($(this).data('max')),\n            $controlMinus = $(this).find('.number-controls__button--minus'),\n            $controlPlus = $(this).find('.number-controls__button--plus'),\n            $sum = $('#'+ $target.data('sum-target-id')),\n            $sumLabel = $('#'+ $target.data('sum-target-label-id'));\n\n        if (value <= min) {\n            $controlMinus.prop({'disabled': true});\n\n            if (value < min) {\n                value = min;\n            }\n        } else if (value >= max) {\n            $controlPlus.prop({'disabled': true});\n\n            if (value > max) {\n                value = max;\n            }\n        }\n\n        $target.html(value);\n\n        if ($targetLabel.length > 0) {\n            if (value === 1) {\n                $targetLabel.html($targetLabel.data('label-singular'));\n            } else {\n                $targetLabel.html($targetLabel.data('label-plural'));\n            }\n        }\n\n        if ($sum.length > 0) {\n            let sumValue = 0;\n\n            $('[data-sum-target-id=\"'+ $sum.attr('id') +'\"]').each(function () {\n                sumValue = sumValue + parseInt($(this).html());\n            });\n\n            $sum.html(sumValue);\n\n            if ($sumLabel.length > 0) {\n                if (sumValue === 1) {\n                    $sumLabel.html($sumLabel.data('label-singular'));\n                } else {\n                    $sumLabel.html($sumLabel.data('label-plural'));\n                }\n            }\n        }\n    }\n});\n\n// action on control click\n$('.number-controls__button').on('click', function () {\n    let $button = $(this),\n        $wrapper = $(this).closest('.number-controls'),\n        $target = $('#'+ $wrapper.data('target-id')),\n        $targetLabel = $('#'+ $wrapper.data('target-label-id'));\n\n    if ($target.length > 0) {\n        let value = parseInt($target.html()),\n            newValue,\n            min = parseInt($wrapper.data('min')),\n            max = parseInt($wrapper.data('max')),\n            step = 1,\n            $controlMinus = $wrapper.find('.number-controls__button--minus'),\n            $controlPlus = $wrapper.find('.number-controls__button--plus'),\n            $sum = $('#'+ $target.data('sum-target-id')),\n            $sumLabel = $('#'+ $target.data('sum-target-label-id'));\n\n        if ($button.attr('class').indexOf('minus') >= 0) {\n            // control is minus\n            newValue = value - step;\n\n            $controlPlus.prop({'disabled': false});\n\n            if (newValue <= min) {\n                $controlMinus.prop({'disabled': true});\n            }\n\n            if (newValue < min) {\n                newValue = min;\n            }\n        } else if ($button.attr('class').indexOf('plus') >= 0) {\n            // control is plus\n            newValue = value + step;\n\n            $controlMinus.prop({'disabled': false});\n\n            if (newValue >= max) {\n                $controlPlus.prop({'disabled': true});\n            }\n\n            if (newValue > max) {\n                newValue = max;\n            }\n        }\n\n        $target.html(newValue);\n\n        if ($targetLabel.length > 0) {\n            if (newValue === 1) {\n                $targetLabel.html($targetLabel.data('label-singular'));\n            } else {\n                $targetLabel.html($targetLabel.data('label-plural'));\n            }\n        }\n\n        if ($sum.length > 0) {\n            let sumValue = 0;\n\n            $('[data-sum-target-id=\"'+ $sum.attr('id') +'\"]').each(function () {\n                sumValue = sumValue + parseInt($(this).html());\n            });\n\n            $sum.html(sumValue);\n\n            if ($sumLabel.length > 0) {\n                if (sumValue === 1) {\n                    $sumLabel.html($sumLabel.data('label-singular'));\n                } else {\n                    $sumLabel.html($sumLabel.data('label-plural'));\n                }\n            }\n        }\n    }\n});","const $body = $('body'),\n    $header = $('header.masthead'),\n    $search = $('.search-overlay');\n\nfunction toggle_menu() {\n    if ($body.hasClass('show-menu')) {\n        hide_menu();\n    } else {\n        show_menu();\n    }\n}\n\nfunction show_menu() {\n    if (!$body.hasClass('show-menu')) {\n        $('.hamburger').addClass('hamburger--active');\n        $header.addClass('masthead--menu-visible');\n        $body.addClass('show-menu');\n    }\n}\n\nfunction hide_menu() {\n    if ($body.hasClass('show-menu')) {\n        $body.removeClass('show-menu');\n        $header.removeClass('masthead--menu-visible');\n        $('.hamburger').removeClass('hamburger--active');\n    }\n}\n\nfunction toggle_search() {\n    if ($body.hasClass('show-search')) {\n        hide_search();\n    } else {\n        show_search();\n    }\n}\n\nfunction show_search() {\n    if (!$body.hasClass('show-search')) {\n        $header.addClass('masthead--search-visible');\n        $body.addClass('show-search');\n        $search.find('input').focus().select();\n    }\n}\n\nfunction hide_search() {\n    if ($body.hasClass('show-search')) {\n        $search.find('input').blur();\n        $body.removeClass('show-search');\n        $header.removeClass('masthead--search-visible');\n    }\n}\n\n\n$('#toggle-menu, #toggle-menu-mobile').click(function (e) {\n    e.preventDefault();\n    hide_search();\n    toggle_menu();\n});\n\n$('#close-menu').click(function (e) {\n    e.preventDefault();\n    hide_menu();\n});\n\n$('#toggle-search, #toggle-search-mobile').click(function (e) {\n    e.preventDefault();\n    hide_menu();\n    toggle_search();\n});\n\n$('#close-search').click(function (e) {\n    e.preventDefault();\n    hide_search();\n});\n\n\n// if escape key is pressed, close all overlays\n$(document).keyup(function (e) {\n    if (e.keyCode == 27) {\n        hide_menu();\n        hide_search();\n    }\n});","if (viewport().width > 991) {\n\n    $('.section--parallax').each(function () {\n        let $wrapper = $(this),\n            $parallax = $(this).find('.section__parallax');\n\n        if ($parallax.length > 0) {\n            $wrapper.on('mousemove', function (event) {\n\n                let objLeft = $wrapper.offset().left,\n                    objTop = $wrapper.offset().top,\n                    objCenterX = objLeft + $wrapper.outerWidth() / 2,\n                    objCenterY = objTop + $wrapper.outerHeight() / 2;\n\n                // calculate percentages\n                let xPer = (event.pageX - objCenterX) / $wrapper.outerWidth() * 5,\n                    yPer = (event.pageY - objCenterY) / $wrapper.outerHeight() * 5;\n\n                // invert values\n                let xMove = xPer - (xPer * 2),\n                    yMove = yPer - (yPer * 2);\n\n                $parallax.css({\n                    'transform': 'translate3d(' + xMove + '%, ' + yMove + '%, 0)'\n                });\n            });\n        }\n    });\n\n}\n","const classPopinVisible = 'popin--visible';\n\n// remove popins that have already been shown, based on cookie\n$('.popins .popin').each(function () {\n    let $popin = $(this),\n        popinID = $popin.data('popin-id');\n\n    if (typeof popinID === 'undefined' || '' === popinID) {\n        return false;\n    }\n\n    // check if cookie exists for this popin - if so, dont show\n    if ($popin.hasClass('popin--has-cookie')) {\n        let cookieHash = 'popin_'+ $popin.data('cookie-hash');\n\n        if (Cookies.get(cookieHash)) {\n            $popin.remove();\n        }\n    }\n});\n\n// show popins on desktop\nif (viewport().width > 991) {\n    setTimeout(function () {\n        $($('.popins .popin').get().reverse()).each(function (i) {\n            let $popin = $(this),\n            delay = $popin.data('popin-delay');\n\n            if (typeof delay == 'undefined') {\n                delay = 0;\n            }\n\n            setTimeout(function () {\n                $popin.addClass(classPopinVisible);\n            }, delay);\n        });\n    }, 2500);\n}\n\n// hide popin on button click\n$('.popin__close').on('click', function() {\n    let $popin = $(this).closest('.popin'); \n\n    $popin.removeClass(classPopinVisible);\n\n    setTimeout(function () {\n        $popin.remove();\n    }, 300);\n\n    // set cookie if needed\n    if ($popin.hasClass('popin--has-cookie')) {\n        let duration = $popin.data('cookie-duration'),\n            cookieHash = 'popin_'+ $popin.data('cookie-hash'); // based on popin content, so if content changes popin will be shown again\n\n        if (typeof duration !== 'undefined' && typeof cookieHash !== 'undefined') {\n            setCookie(cookieHash, 1, duration);\n        }\n    }\n});\n","// scale video elements to max-size within parent element\nfunction resizeVideo( $video = false, availableWidth = false, availableHeight = false ) {\n    if ( !( $video && availableWidth && availableHeight ) ) return false;\n\n    let videoWidth = availableHeight / 0.5625,\n        videoHeight;\n\n    if ( videoWidth > availableWidth ) {\n        $video.css({\n            'width': videoWidth,\n            'height': availableHeight\n        });\n    } else {\n        videoHeight = availableWidth * 0.5625;\n\n        $video.css({\n            'width': availableWidth,\n            'height': videoHeight\n        });\n    }\n}\n\n$('.player--dynamic-resize').each(function() {\n    let $player = $(this),\n        $wrapper = $player.parent();\n\n    resizeVideo($player, $wrapper.outerWidth(), $wrapper.outerHeight());\n\n    $(window).on('resize', function () {\n        resizeVideo($player, $wrapper.outerWidth(), $wrapper.outerHeight());\n    });\n});\n","$('.will-animate').each( function() {\n    let $this = $(this),\n        inview = new Waypoint.Inview({\n        element: $(this),\n        enter: function () {\n            if( !$this.hasClass('animated') ) {\n                $this.addClass('animated');\n            }\n        }\n    });\n});\n\n","import * as ScrollMagic from 'scrollmagic';\nimport gsap from 'gsap';\nimport { TweenMax, TimelineMax } from 'gsap';\nimport { ScrollMagicPluginGsap } from \"scrollmagic-plugin-gsap\";\n\n\nScrollMagicPluginGsap(ScrollMagic, gsap);\n\n\nif ($('#magic-map').length > 0 && viewport().width > 991) {\n\n    let $wrapper = $('#magic-map .magic-map__inner');\n\n    // prepare route paths\n    function pathPrepare($el) {\n        let lineLength = $el[0].getTotalLength();\n\n        $el.css(\"stroke-dasharray\", lineLength);\n        $el.css(\"stroke-dashoffset\", lineLength);\n    }\n\n    let $routeSlotermeer = $('#magic-map .magic-map__routes .route--slotermeer path'),\n        $routeRembrandtpark = $('#magic-map .magic-map__routes .route--rembrandtpark path'),\n        $routeCityCentre = $('#magic-map .magic-map__routes .route--city-centre path'),\n        $routeLelylaan = $('#magic-map .magic-map__routes .route--lelylaan path'),\n        $routeVondelpark = $('#magic-map .magic-map__routes .route--vondelpark path'),\n        $routeLeidseplein = $('#magic-map .magic-map__routes .route--leidseplein path'),\n        $routeRijksmuseum = $('#magic-map .magic-map__routes .route--rijksmuseum path'),\n        $routeCentraal = $('#magic-map .magic-map__routes .route--centraal path');\n\n    pathPrepare($routeSlotermeer);\n    pathPrepare($routeRembrandtpark);\n    pathPrepare($routeCityCentre);\n    pathPrepare($routeLelylaan);\n    pathPrepare($routeVondelpark);\n    pathPrepare($routeLeidseplein);\n    pathPrepare($routeRijksmuseum);\n    pathPrepare($routeCentraal);\n\n\n    // create ScrollMagic Controller\n    let controller = new ScrollMagic.Controller();\n\n    let timeline = new TimelineMax();\n\n    timeline\n    .from('#magic-map .magic-map__pins .pin--met', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .from('#magic-map .magic-map__labels .label--met', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    })\n    .from('#magic-map .magic-map__pins .pin--slotermeer', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeSlotermeer, 2, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--slotermeer', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1')\n    .from('#magic-map .magic-map__pins .pin--rembrandtpark', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeRembrandtpark, 2, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--rembrandtpark', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1')\n    .from('#magic-map .magic-map__pins .pin--city-centre', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeCityCentre, 2, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--city-centre', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1')\n    .from('#magic-map .magic-map__pins .pin--lelylaan', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeLelylaan, 2, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--lelylaan', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1')\n    .from('#magic-map .magic-map__pins .pin--vondelpark', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeVondelpark, 2, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--vondelpark', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1')\n    .from('#magic-map .magic-map__pins .pin--leidseplein', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeLeidseplein, 2, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--leidseplein', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1')\n    .from('#magic-map .magic-map__pins .pin--rijksmuseum', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeRijksmuseum, 2, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--rijksmuseum', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1')\n    .from('#magic-map .magic-map__pins .pin--centraal', 1, {\n        autoAlpha: 0,\n        y: -50,\n        ease: Power3.easeOut\n    })\n    .to($routeCentraal, 3, {\n        strokeDashoffset: 0,\n        ease: Power3.easeInOut\n    })\n    .from('#magic-map .magic-map__labels .label--centraal', 1, {\n        autoAlpha: 0,\n        y: 25,\n        ease: Power3.easeOut\n    }, '-=1');\n\n\n    // create ScrollMagic Scene(s)\n    let scene = new ScrollMagic.Scene({\n        triggerElement: '#magic-map',\n        triggerHook: 0,\n        duration: '50%'\n    })\n    // .addIndicators()\n    .setTween(timeline)\n    .setPin('#magic-map'); // , {pushFollowers: false}\n\n\n    // add scene(s) to ScrollMagic Controller\n    controller.addScene(scene);\n\n}","const $button = $('.scroll-to-top__button'),\n    classButtonVisible = 'scroll-to-top__button--visible';\n\n$(window).on('scroll', function () {\n    let scrolledDistance = $(document).scrollTop(),\n        showTrigger = viewport().height,\n        hideTrigger = $(document).outerHeight() - $('.site-footer').outerHeight() - viewport().height;\n\n    if (scrolledDistance > showTrigger && scrolledDistance < hideTrigger) {\n\n        if (!$button.hasClass(classButtonVisible)) {\n            $button.addClass(classButtonVisible);\n        }\n\n    } else {\n        if ($button.hasClass(classButtonVisible)) {\n            $button.removeClass(classButtonVisible);\n        }\n    }\n});\n\n$button.on('click', function (e) {\n    e.preventDefault();\n\n    $('html, body').stop().animate({\n        scrollTop: 0\n    }, 1000, 'easeInOutCubic', function () {\n        $button.blur();\n    });\n});","$('.events__slider').slick({\n    rows: 0,\n    arrows: true,\n    prevArrow: '<a href=\"#\" class=\"slick-control slick-control--prev\" title=\"Vorige\" data-gtm-event=\"Events slider control: previous\" rel=\"nofollow\"><i class=\"far fa-angle-left\"></i></a>',\n    nextArrow: '<a href=\"#\" class=\"slick-control slick-control--next\" title=\"Volgende\" data-gtm-event=\"Events slider control: next\" rel=\"nofollow\"><i class=\"far fa-angle-right\"></i></a>',\n    dots: true,\n    infinite: true,\n    speed: 1000,\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    swipeToSlide: true,\n    centerMode: true,\n    adaptiveHeight: true,\n    cssEase: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n    lazyLoad: 'ondemand',\n    customPaging: function (slick, index) {\n        return '<button id=\"slick-dot-' + index + '\" class=\"slick-dot\"></button>';\n    },\n    responsive: [{\n        breakpoint: 991,\n        settings: {\n            centerPadding: '0px',\n        }\n    }],\n});\n\n// moving sliders when item that is not active is clicked\n$('.events__slider').on( 'click', '.slick-slide', function (e) {\n    if( !$(this).hasClass('slick-active') ) {\n        e.preventDefault();\n\n        let $slider = $(this).closest('.slick-slider');\n\n        // check if slide is before or after active slides\n        if( $(this).prevAll('.slick-active').length ) {\n            // console.log('element comes after active');\n            $slider.slick('slickNext');\n        } else {\n            // console.log('element comes before active');\n            $slider.slick('slickPrev');\n        }\n    }\n});\n\n\n$('.links__slider').slick({\n    rows: 0,\n    arrows: true,\n    prevArrow: '<a href=\"#\" class=\"slick-control slick-control--prev\" title=\"Vorige\" data-gtm-event=\"Links slider control: previous\" rel=\"nofollow\"><i class=\"far fa-angle-left\"></i></a>',\n    nextArrow: '<a href=\"#\" class=\"slick-control slick-control--next\" title=\"Volgende\" data-gtm-event=\"Links slider control: next\" rel=\"nofollow\"><i class=\"far fa-angle-right\"></i></a>',\n    dots: true,\n    infinite: true,\n    speed: 1000,\n    fade: true,\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    swipeToSlide: true,\n    centerMode: true,\n    adaptiveHeight: true,\n    cssEase: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n    lazyLoad: 'ondemand',\n    customPaging: function (slick, index) {\n        return '<button id=\"slick-dot-' + index + '\" class=\"slick-dot\"></button>';\n    },\n});\n\n\n$('.images__slider').slick({\n    rows: 0,\n    arrows: true,\n    prevArrow: '<a href=\"#\" class=\"slick-control slick-control--prev\" title=\"Vorige\" data-gtm-event=\"Images slider control: previous\" rel=\"nofollow\"><i class=\"far fa-angle-left\"></i></a>',\n    nextArrow: '<a href=\"#\" class=\"slick-control slick-control--next\" title=\"Volgende\" data-gtm-event=\"Images slider control: next\" rel=\"nofollow\"><i class=\"far fa-angle-right\"></i></a>',\n    dots: true,\n    infinite: true,\n    speed: 1000,\n    fade: true,\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    swipeToSlide: true,\n    centerMode: true,\n    adaptiveHeight: true,\n    cssEase: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n    lazyLoad: 'ondemand',\n    customPaging: function (slick, index) {\n        return '<button id=\"slick-dot-' + index + '\" class=\"slick-dot\"></button>';\n    },\n});\n\n\nconst classGallerySlider = 'gallery__slider',\n    classGalleryThumbActive = 'thumb--active';\n\n$('.'+classGallerySlider).on('init afterChange', function() {\n    // update active thumb\n    let $wrapper = $(this).closest('.gallery'),\n        slideIndex = $wrapper.find('.'+ classGallerySlider +' .slick-current').data('slide-index');\n\n    $wrapper.find('.gallery__thumbs [data-slide-index=\"'+ slideIndex +'\"]').addClass(classGalleryThumbActive).siblings().removeClass(classGalleryThumbActive);\n}).slick({\n    rows: 0,\n    arrows: true,\n    dots: false,\n    prevArrow: '<a href=\"#\" class=\"slick-control slick-control--prev\" title=\"Vorige\" data-gtm-event=\"Gallery slider control: previous\" rel=\"nofollow\"><div class=\"slick-control__inner\"><i class=\"far fa-angle-left\"></i></div></a>',\n    nextArrow: '<a href=\"#\" class=\"slick-control slick-control--next\" title=\"Volgende\" data-gtm-event=\"Gallery slider control: next\" rel=\"nofollow\"><div class=\"slick-control__inner\"><i class=\"far fa-angle-right\"></i></div></a>',\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    swipeToSlide: true,\n    infinite: false,\n    speed: 500,\n    adaptiveHeight: true,\n    cssEase: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n    lazyLoad: 'ondemand'\n});\n\n$('.gallery__thumbs .thumb').on('click', function() {\n    // update active class and move slider\n    let slideIndex = $(this).data('slide-index');\n\n    $(this).addClass(classGalleryThumbActive).siblings().removeClass(classGalleryThumbActive);\n    $(this).closest('.gallery').find('.'+ classGallerySlider).slick('slickGoTo', (slideIndex-1));\n});\n\n$('.section__background-carousel').slick({\n    rows: 0,\n    arrows: false,\n    dots: false,\n    autoplay: true,\n    autoplaySpeed: 3000,\n    speed: 1000,\n    fade: true,\n    infinite: true,\n    lazyLoad: 'ondemand'\n});\n\n$('.quote-carousel').slick({\n    rows: 0,\n    arrows: false,\n    dots: true,\n    autoplay: true,\n    autoplaySpeed: 5000,\n    speed: 500,\n    infinite: true,\n    customPaging: function (slick, index) {\n        return '<button type=\"button\" id=\"slick-dot-' + index + '\" class=\"slick-dot\" rel=\"nofollow\"></button>';\n    },\n});\n\n$('.arrangements__slider').slick({\n    rows: 0,\n    arrows: false,\n    prevArrow: '<a href=\"#\" class=\"slick-control slick-control--prev\" title=\"Vorige\" data-gtm-event=\"Arrangements slider control: previous\" rel=\"nofollow\"><i class=\"far fa-angle-left\"></i></a>',\n    nextArrow: '<a href=\"#\" class=\"slick-control slick-control--next\" title=\"Volgende\" data-gtm-event=\"Arrangements slider control: next\" rel=\"nofollow\"><i class=\"far fa-angle-right\"></i></a>',\n    dots: true,\n    slidesToShow: 3,\n    slidesToScroll: 1,\n    swipeToSlide: true,\n    infinite: false,\n    speed: 300,\n    lazyLoad: 'ondemand',\n    adaptiveHeight: false,\n    customPaging: function (slick, index) {\n        return '<button type=\"button\" id=\"slick-dot-' + index + '\" class=\"slick-dot\" rel=\"nofollow\"></button>';\n    },\n    responsive: [{\n        breakpoint: 1200,\n        settings: {\n            slidesToShow: 2\n        }\n    },{\n        breakpoint: 767,\n        settings: {\n            slidesToShow: 1,\n            adaptiveHeight: true\n        }\n    }]\n});\n\n$('.content-image-blocks__slider').slick({\n    rows: 0,\n    arrows: false,\n    dots: true,\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    swipeToSlide: true,\n    infinite: false,\n    speed: 300,\n    lazyLoad: 'ondemand',\n    adaptiveHeight: true,\n    mobileFirst: true,\n    customPaging: function (slick, index) {\n        return '<button type=\"button\" id=\"slick-dot-' + index + '\" class=\"slick-dot\" rel=\"nofollow\"></button>';\n    },\n    responsive: [{\n        breakpoint: 991,\n        settings: 'unslick'\n    }]\n});","const $header = $('header.masthead'),\n    classHeaderSticky = 'masthead--fixed',\n    classHeaderVisible = 'masthead--visible',\n    headerVisibleTreshold = viewport().height / 2;\n\n$(window).on('scroll', function () {\n    let scrolledDistance = $(document).scrollTop();\n\n    if (scrolledDistance > headerVisibleTreshold) {\n        // console.log('Show header');\n        if (viewport().width > 580) {\n            $header.addClass(classHeaderSticky).addClass(classHeaderVisible);\n        }\n    } else if (scrolledDistance <= ($header.outerHeight() * 2)) {\n        // console.log('Hide header URGENT');\n        $header.removeClass(classHeaderSticky).removeClass(classHeaderVisible);\n    } else {\n        // console.log('Hide header');\n        $header.removeClass(classHeaderVisible);\n    }\n});\n","const $body = $('body'),\n    $header = $('header.masthead'),\n    $nav = $('.sticky-nav'),\n    classNavSticky = 'sticky-nav--sticky';\n\nif ($nav.length > 0) {\n\n    $(window).on('scroll', function () {\n        let scrolledDistance = $(document).scrollTop(),\n            scrollOffset = 0;\n\n        if (viewport().width > 580) {\n            scrollOffset = scrollOffset + $header.outerHeight();\n        }\n\n        let navStickyTreshold = $nav.offset().top - scrollOffset;\n\n        if (scrolledDistance >= navStickyTreshold) {\n            $nav.addClass(classNavSticky);\n        } else {\n            $nav.removeClass(classNavSticky);\n        }\n    });\n\n\n    /*\n    $body.scrollspy({\n        target: '.sticky-nav',\n        offset: ($header.outerHeight() + ($nav.outerHeight() * 1.5))\n    });\n    $nav.on('activate.bs.scrollspy', setHorizontalScroll); */\n\n\n    // add class to sticky-nav component when contents are wider than viewport width\n    function setPageNavClass() {\n        let $content = $nav.find('.sticky-nav__menu'),\n            classPageNavOverflow = 'sticky-nav--overflow';\n\n        if ($content.width() > viewport().width) {\n            $nav.addClass(classPageNavOverflow);\n        } else {\n            $nav.removeClass(classPageNavOverflow);\n        }\n    }\n\n    setTimeout(setPageNavClass, 100);\n    $(window).on('resize', setPageNavClass);\n\n\n    // called when new item becomes active in .sticky-nav scrollspy\n    function setHorizontalScroll() {\n        let $active = $nav.find('.active'),\n            $scrollContainer = $nav.find('.sticky-nav__inner');\n\n        $scrollContainer.scrollLeft(0);\n\n        if ($active.length > 0) {\n            let offsetX = $active.offset().left,\n                diff = (offsetX + $active.outerWidth()) - viewport().width;\n\n            if (diff > 0) {\n                $scrollContainer.scrollLeft(diff);\n            } else {\n                $scrollContainer.scrollLeft(0);\n            }\n        }\n    }\n\n    setTimeout(setHorizontalScroll, 150);\n}","let $tabs,\n    $activeTab,\n    $activeMobileTab,\n    tabID,\n    classTabActive = 'tab--current',\n    classMobileTabActive = 'mobile-tab--current';\n\n// switch tabs on user interaction\n$('.tab').on('click', function() {\n    if (!$(this).hasClass(classTabActive)) {\n        $tabs = $(this).closest('.tabs');\n        tabID = $(this).data('tab-id');\n\n        // update tabs list\n        $(this).addClass(classTabActive).siblings().removeClass(classTabActive);\n        // show tab-content\n        $tabs.find('.tab-content[data-tab-id=\"'+ tabID +'\"]').show().siblings('.tab-content').hide();\n        // update mobile tabs\n        $tabs.find('.mobile-tab[data-tab-id=\"'+ tabID +'\"]').addClass(classMobileTabActive).siblings('.mobile-tab').removeClass(classMobileTabActive);\n    }\n});\n\n$('.mobile-tab').on('click', function() {\n    if (!$(this).hasClass(classMobileTabActive)) {\n        let scrollOffset = 0;\n\n        $tabs = $(this).closest('.tabs');\n        tabID = $(this).data('tab-id');\n\n        if (viewport().width > 580) {\n            scrollOffset = scrollOffset + $('header.masthead').outerHeight();\n        }\n\n        if ($('.sticky-nav').length > 0) {\n            scrollOffset = scrollOffset + (($('.sticky-nav').outerHeight() / 4) * 3);\n        }\n\n        // update mobile tabs\n        $(this).addClass(classMobileTabActive).siblings('.mobile-tab').removeClass(classMobileTabActive);\n        // show tab-content\n        $tabs.find('.tab-content[data-tab-id=\"'+ tabID +'\"]').show().siblings('.tab-content').hide();\n        // update tabs list\n        $tabs.find('.tab[data-tab-id=\"'+ tabID +'\"]').addClass(classTabActive).siblings().removeClass(classTabActive);\n\n        // animate scroll to selected tab content\n        $('html, body').stop().animate({\n            scrollTop: $(this).offset().top - 10 - scrollOffset\n        }, 500, 'easeInOutCubic', function() {\n            $(this).blur();\n        });\n    }\n});\n\n// show content for active tab on pageload\n$('.tabs').each( function() {\n    $tabs = $(this);\n    $activeTab = $tabs.find('.tab.'+classTabActive);\n    $activeMobileTab = $tabs.find('.mobile-tab.'+classMobileTabActive);\n\n    if ($activeTab.length > 0 && $activeMobileTab.length > 0) {\n        tabID = $activeTab.data('tab-id');\n\n        $tabs.find('.tab-content[data-tab-id=\"'+ tabID +'\"]').show();\n    } else {\n        // if no tab is active, make first tab active\n        $activeTab = $tabs.find('.tab:first-child');\n        tabID = $activeTab.data('tab-id');\n        $activeMobileTab = $tabs.find('.mobile-tab[data-tab-id=\"'+ tabID +'\"]');\n\n        $activeTab.addClass(classTabActive);\n        $activeMobileTab.addClass(classMobileTabActive);\n        $tabs.find('.tab-content[data-tab-id=\"'+ tabID +'\"]').show();\n    }\n});\n","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*!\n * Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.3/customize/?id=858d34fb58d5b8271ca06f366175065a)\n * Config saved to config.json and https://gist.github.com/858d34fb58d5b8271ca06f366175065a\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(t){\"use strict\";var o=t.fn.jquery.split(\" \")[0].split(\".\");if(o[0]<2&&o[1]<9||1==o[0]&&9==o[1]&&o[2]<1||o[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),+function(t){\"use strict\";function o(o){return this.each(function(){var r=t(this),n=r.data(\"bs.popover\"),i=\"object\"==typeof o&&o;!n&&/destroy|hide/.test(o)||(n||r.data(\"bs.popover\",n=new e(this,i)),\"string\"==typeof o&&n[o]())})}var e=function(t,o){this.init(\"popover\",t,o)};if(!t.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");e.VERSION=\"3.3.7\",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),o=this.getTitle(),e=this.getContent();t.find(\".popover-title\")[this.options.html?\"html\":\"text\"](o),t.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof e?\"html\":\"append\":\"text\"](e),t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,o=this.options;return t.attr(\"data-content\")||(\"function\"==typeof o.content?o.content.call(t[0]):o.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var r=t.fn.popover;t.fn.popover=o,t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=r,this}}(jQuery);","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=b550cab30613893d70761e2f5bc73ab7)\n * Config saved to config.json and https://gist.github.com/b550cab30613893d70761e2f5bc73ab7\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(t){\"use strict\";var e=t.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),+function(t){\"use strict\";function e(e){return this.each(function(){var n=t(this),r=n.data(\"bs.tab\");r||n.data(\"bs.tab\",r=new a(this)),\"string\"==typeof e&&r[e]()})}var a=function(e){this.element=t(e)};a.VERSION=\"3.3.7\",a.TRANSITION_DURATION=150,a.prototype.show=function(){var e=this.element,a=e.closest(\"ul:not(.dropdown-menu)\"),n=e.data(\"target\");if(n||(n=e.attr(\"href\"),n=n&&n.replace(/.*(?=#[^\\s]*$)/,\"\")),!e.parent(\"li\").hasClass(\"active\")){var r=a.find(\".active:last a\"),i=t.Event(\"hide.bs.tab\",{relatedTarget:e[0]}),s=t.Event(\"show.bs.tab\",{relatedTarget:r[0]});if(r.trigger(i),e.trigger(s),!s.isDefaultPrevented()&&!i.isDefaultPrevented()){var o=t(n);this.activate(e.closest(\"li\"),a),this.activate(o,o.parent(),function(){r.trigger({type:\"hidden.bs.tab\",relatedTarget:e[0]}),e.trigger({type:\"shown.bs.tab\",relatedTarget:r[0]})})}}},a.prototype.activate=function(e,n,r){function i(){s.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),e.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),o?(e[0].offsetWidth,e.addClass(\"in\")):e.removeClass(\"fade\"),e.parent(\".dropdown-menu\").length&&e.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),r&&r()}var s=n.find(\"> .active\"),o=r&&t.support.transition&&(s.length&&s.hasClass(\"fade\")||!!n.find(\"> .fade\").length);s.length&&o?s.one(\"bsTransitionEnd\",i).emulateTransitionEnd(a.TRANSITION_DURATION):i(),s.removeClass(\"in\")};var n=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=a,t.fn.tab.noConflict=function(){return t.fn.tab=n,this};var r=function(a){a.preventDefault(),e.call(t(this),\"show\")};t(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',r).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',r)}(jQuery);","/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=b508f36fec449178d549)\n * Config saved to config.json and https://gist.github.com/b508f36fec449178d549\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(t){\"use strict\";var e=t.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher\")}(jQuery),+function(t){\"use strict\";function e(e){return this.each(function(){var o=t(this),n=o.data(\"bs.tooltip\"),s=\"object\"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||o.data(\"bs.tooltip\",n=new i(this,s)),\"string\"==typeof e&&n[e]())})}var i=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",t,e)};i.VERSION=\"3.3.5\",i.TRANSITION_DURATION=150,i.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var n=this.options.trigger.split(\" \"),s=n.length;s--;){var r=n[s];if(\"click\"==r)this.$element.on(\"click.\"+this.type,this.options.selector,t.proxy(this.toggle,this));else if(\"manual\"!=r){var a=\"hover\"==r?\"mouseenter\":\"focusin\",l=\"hover\"==r?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+\".\"+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&\"number\"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,i)),e instanceof t.Event&&(i.inState[\"focusin\"==e.type?\"focus\":\"hover\"]=!0),i.tip().hasClass(\"in\")||\"in\"==i.hoverState?void(i.hoverState=\"in\"):(clearTimeout(i.timeout),i.hoverState=\"in\",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){\"in\"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,i)),e instanceof t.Event&&(i.inState[\"focusout\"==e.type?\"focus\":\"hover\"]=!1),i.isInStateTrue()?void 0:(clearTimeout(i.timeout),i.hoverState=\"out\",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){\"out\"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide())},i.prototype.show=function(){var e=t.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),r=this.getUID(this.type);this.setContent(),s.attr(\"id\",r),this.$element.attr(\"aria-describedby\",r),this.options.animation&&s.addClass(\"fade\");var a=\"function\"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\\s?auto?\\s?/i,p=l.test(a);p&&(a=a.replace(l,\"\")||\"top\"),s.detach().css({top:0,left:0,display:\"block\"}).addClass(a).data(\"bs.\"+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var h=this.getPosition(),f=s[0].offsetWidth,u=s[0].offsetHeight;if(p){var c=a,d=this.getPosition(this.$viewport);a=\"bottom\"==a&&h.bottom+u>d.bottom?\"top\":\"top\"==a&&h.top-u<d.top?\"bottom\":\"right\"==a&&h.right+f>d.width?\"left\":\"left\"==a&&h.left-f<d.left?\"right\":a,s.removeClass(c).addClass(a)}var v=this.getCalculatedOffset(a,h,f,u);this.applyPlacement(v,a);var g=function(){var t=n.hoverState;n.$element.trigger(\"shown.bs.\"+n.type),n.hoverState=null,\"out\"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass(\"fade\")?s.one(\"bsTransitionEnd\",g).emulateTransitionEnd(i.TRANSITION_DURATION):g()}},i.prototype.applyPlacement=function(e,i){var o=this.tip(),n=o[0].offsetWidth,s=o[0].offsetHeight,r=parseInt(o.css(\"margin-top\"),10),a=parseInt(o.css(\"margin-left\"),10);isNaN(r)&&(r=0),isNaN(a)&&(a=0),e.top+=r,e.left+=a,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass(\"in\");var l=o[0].offsetWidth,p=o[0].offsetHeight;\"top\"==i&&p!=s&&(e.top=e.top+s-p);var h=this.getViewportAdjustedDelta(i,e,l,p);h.left?e.left+=h.left:e.top+=h.top;var f=/top|bottom/.test(i),u=f?2*h.left-n+l:2*h.top-s+p,c=f?\"offsetWidth\":\"offsetHeight\";o.offset(e),this.replaceArrow(u,o[0][c],f)},i.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?\"left\":\"top\",50*(1-t/e)+\"%\").css(i?\"top\":\"left\",\"\")},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](e),t.removeClass(\"fade in top bottom left right\")},i.prototype.hide=function(e){function o(){\"in\"!=n.hoverState&&s.detach(),n.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+n.type),e&&e()}var n=this,s=t(this.$tip),r=t.Event(\"hide.bs.\"+this.type);return this.$element.trigger(r),r.isDefaultPrevented()?void 0:(s.removeClass(\"in\"),t.support.transition&&s.hasClass(\"fade\")?s.one(\"bsTransitionEnd\",o).emulateTransitionEnd(i.TRANSITION_DURATION):o(),this.hoverState=null,this)},i.prototype.fixTitle=function(){var t=this.$element;(t.attr(\"title\")||\"string\"!=typeof t.attr(\"data-original-title\"))&&t.attr(\"data-original-title\",t.attr(\"title\")||\"\").attr(\"title\",\"\")},i.prototype.hasContent=function(){return this.getTitle()},i.prototype.getPosition=function(e){e=e||this.$element;var i=e[0],o=\"BODY\"==i.tagName,n=i.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var s=o?{top:0,left:0}:e.offset(),r={scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},a=o?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},n,r,a,s)},i.prototype.getCalculatedOffset=function(t,e,i,o){return\"bottom\"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:\"top\"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:\"left\"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},i.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,r=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-s-r.scroll,l=e.top+s-r.scroll+o;a<r.top?n.top=r.top-a:l>r.top+r.height&&(n.top=r.top+r.height-l)}else{var p=e.left-s,h=e.left+s+i;p<r.left?n.left=r.left-p:h>r.right&&(n.left=r.left+r.width-h)}return n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr(\"data-original-title\")||(\"function\"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data(\"bs.\"+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass(\"in\")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery);","/**\n* @author: Rinat G. http://coding.kz\n* @copyright: Copyright (c) 2019 Rinat G.\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\n*/\n\n// Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js\n(function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Make globaly available as well\n        define(['moment'], function (moment) {\n            return factory(moment);\n        });\n    } else if (typeof module === 'object' && module.exports) {\n        // Node / Browserify\n        var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment');\n        module.exports = factory(moment);\n    } else {\n        // Browser globals\n        root.Lightpick = factory(root.moment);\n    }\n}(this, function(moment) {\n    'use strict';\n\n    var document = window.document,\n\n    defaults = {\n        field: null,\n        secondField: null,\n        firstDay: 1,\n        parentEl: 'body',\n        lang: 'auto',\n        format: 'DD/MM/YYYY',\n        separator: ' - ',\n        numberOfMonths: 1,\n        numberOfColumns: 2,\n        singleDate: true,\n        autoclose: true,\n        repick: false,\n        startDate: null,\n        endDate: null,\n        minDate: null,\n        maxDate: null,\n        disableDates: null,\n        selectForward: false,\n        selectBackward: false,\n        minDays: null,\n        maxDays: null,\n        hoveringTooltip: true,\n        hideOnBodyClick: true,\n        footer: false,\n        disabledDatesInRange: true,\n        tooltipNights: false,\n        orientation: 'auto',\n        disableWeekends: false,\n        inline: false,\n        dropdowns: {\n            years: {\n                min: 1900,\n                max: null,\n            },\n            months: true,\n        },\n        locale: {\n            buttons: {\n                prev: '&leftarrow;',\n                next: '&rightarrow;',\n                close: '&times;',\n                reset: 'Reset',\n                apply: 'Apply',\n            },\n            tooltip: {\n                one: 'day',\n                other: 'days',\n            },\n            tooltipOnDisabled: null,\n            pluralize: function(i, locale){\n                if (typeof i === \"string\") i = parseInt(i, 10);\n\n                if (i === 1 && 'one' in locale) return locale.one;\n                if ('other' in locale) return locale.other;\n\n                return '';\n            },\n        },\n        onRender: null,\n        onSelect: null,\n        onOpen: null,\n        onClose: null,\n        onError: null,\n        onDayRender: null,\n    },\n\n    renderTopButtons = function(opts)\n    {\n        return '<div class=\"lightpick__toolbar\">'\n            + ''\n            + '<button type=\"button\" class=\"lightpick__previous-action\">' + opts.locale.buttons.prev + '</button>'\n            + '<button type=\"button\" class=\"lightpick__next-action\">' + opts.locale.buttons.next + '</button>'\n            + (!opts.autoclose && !opts.inline ? '<button type=\"button\" class=\"lightpick__close-action\">' + opts.locale.buttons.close + '</button>'  : '')\n            + '</div>';\n    },\n\n    weekdayName = function(opts, day, short)\n    {\n        return new Date(1970, 0, day).toLocaleString(opts.lang, { weekday: short ? 'short' : 'long' })\n    },\n\n    renderDay = function(opts, date, dummy, extraClass)\n    {\n        if (dummy) return '<div></div>';\n\n        var date = moment(date),\n            prevMonth = moment(date).subtract(1, 'month'),\n            nextMonth = moment(date).add(1, 'month');\n\n        var day = {\n            time: moment(date).valueOf(),\n            className: ['lightpick__day', 'is-available']\n        };\n\n        if (extraClass instanceof Array || Object.prototype.toString.call(extraClass) === '[object Array]') {\n            extraClass = extraClass.filter( function( el ) {\n                return ['lightpick__day', 'is-available', 'is-previous-month', 'is-next-month'].indexOf( el ) >= 0;\n            });\n            day.className = day.className.concat(extraClass);\n        }\n        else {\n            day.className.push(extraClass);\n        }\n\n        if (opts.disableDates) {\n            for (var i = 0; i < opts.disableDates.length; i++) {\n                if (opts.disableDates[i] instanceof Array || Object.prototype.toString.call(opts.disableDates[i]) === '[object Array]') {\n                    var _from = moment(opts.disableDates[i][0]),\n                        _to = moment(opts.disableDates[i][1]);\n\n                    if (_from.isValid() && _to.isValid() && date.isBetween(_from, _to, 'day', '[]')){\n                        day.className.push('is-disabled');\n                    }\n                }\n                else if (moment(opts.disableDates[i]).isValid() && moment(opts.disableDates[i]).isSame(date, 'day')) {\n                    day.className.push('is-disabled');\n                }\n\n                if (day.className.indexOf('is-disabled') >= 0) {\n\n                    if (opts.locale.tooltipOnDisabled && (!opts.startDate || date.isAfter(opts.startDate) || opts.startDate && opts.endDate)) {\n                        day.className.push('disabled-tooltip');\n                    }\n\n                    if (day.className.indexOf('is-start-date') >= 0) {\n                        this.setStartDate(null);\n                        this.setEndDate(null);\n                    }\n                    else if (day.className.indexOf('is-end-date') >= 0) {\n                        this.setEndDate(null);\n                    }\n                }\n            }\n        }\n\n        if (opts.minDays && opts.startDate && !opts.endDate) {\n            if (date.isBetween(moment(opts.startDate).subtract(opts.minDays - 1, 'day'), moment(opts.startDate).add(opts.minDays - 1, 'day'), 'day')) {\n                day.className.push('is-disabled');\n\n                if (opts.selectForward && date.isSameOrAfter(opts.startDate)) {\n                    day.className.push('is-forward-selected');\n                    day.className.push('is-in-range');\n                }\n            }\n        }\n\n        if (opts.maxDays && opts.startDate && !opts.endDate) {\n            if (date.isSameOrBefore(moment(opts.startDate).subtract(opts.maxDays, 'day'), 'day')) {\n                day.className.push('is-disabled');\n            }\n            else if (date.isSameOrAfter(moment(opts.startDate).add(opts.maxDays, 'day'), 'day')) {\n                day.className.push('is-disabled');\n            }\n        }\n\n        if (opts.repick && (opts.minDays || opts.maxDays) && opts.startDate && opts.endDate) {\n            var tempStartDate = moment(opts.repickTrigger == opts.field ? opts.endDate : opts.startDate);\n\n            if (opts.minDays) {\n                if (date.isBetween(moment(tempStartDate).subtract(opts.minDays - 1, 'day'), moment(tempStartDate).add(opts.minDays - 1, 'day'), 'day')) {\n                    day.className.push('is-disabled');\n                }\n            }\n\n            if (opts.maxDays) {\n                if (date.isSameOrBefore(moment(tempStartDate).subtract(opts.maxDays, 'day'), 'day')) {\n                    day.className.push('is-disabled');\n                }\n                else if (date.isSameOrAfter(moment(tempStartDate).add(opts.maxDays, 'day'), 'day')) {\n                    day.className.push('is-disabled');\n                }\n            }\n        }\n\n        if (date.isSame(new Date(), 'day')) {\n            day.className.push('is-today');\n        }\n\n        if (date.isSame(opts.startDate, 'day')) {\n            day.className.push('is-start-date');\n        }\n\n        if (date.isSame(opts.endDate, 'day')) {\n            day.className.push('is-end-date');\n        }\n\n        if (opts.startDate && opts.endDate && date.isBetween(opts.startDate, opts.endDate, 'day', '[]')) {\n            day.className.push('is-in-range');\n        }\n\n        if (moment().isSame(date, 'month')) {\n\n        }\n        else if (prevMonth.isSame(date, 'month')) {\n            day.className.push('is-previous-month');\n        }\n        else if (nextMonth.isSame(date, 'month')) {\n            day.className.push('is-next-month');\n        }\n\n        if (opts.minDate && date.isBefore(opts.minDate, 'day')) {\n            day.className.push('is-disabled');\n        }\n\n        if (opts.maxDate && date.isAfter(opts.maxDate, 'day')) {\n            day.className.push('is-disabled');\n        }\n\n        if (opts.selectForward && !opts.singleDate && opts.startDate && !opts.endDate && date.isBefore(opts.startDate, 'day')) {\n            day.className.push('is-disabled');\n        }\n\n        if (opts.selectBackward && !opts.singleDate && opts.startDate && !opts.endDate && date.isAfter(opts.startDate, 'day')) {\n            day.className.push('is-disabled');\n        }\n\n        if (opts.disableWeekends && (date.isoWeekday() == 6 || date.isoWeekday() == 7)) {\n            day.className.push('is-disabled');\n        }\n\n        day.className = day.className.filter(function(value, index, self) {\n            return self.indexOf(value) === index;\n        });\n\n        if (day.className.indexOf('is-disabled') >= 0 && day.className.indexOf('is-available') >= 0) {\n            day.className.splice(day.className.indexOf('is-available'), 1);\n        }\n\n        var div = document.createElement('div');\n        div.className = day.className.join(' ');\n        div.innerHTML = date.get('date');\n        div.setAttribute('data-time', day.time);\n\n        if(typeof opts.onDayRender === 'function') {\n            opts.onDayRender.call(this, div, date);\n        }\n\n        return div.outerHTML;\n    },\n\n    renderMonthsList = function(date, opts) \n    {\n        var d = moment(date),\n            select = document.createElement('select');\n\n        for (var idx = 0; idx < 12; idx++) {\n            d.set('month', idx);\n\n            var option = document.createElement('option');\n            option.value = d.toDate().getMonth();\n            option.text = d.toDate().toLocaleString(opts.lang, { month: 'long' });\n\n            if (idx === date.toDate().getMonth()) {\n                option.setAttribute('selected', 'selected');\n            }\n\n            select.appendChild(option);\n        }\n\n        select.className = 'lightpick__select lightpick__select-months';\n        \n        // for text align to right\n        select.dir = 'rtl';\n\n        if (!opts.dropdowns || !opts.dropdowns.months) {\n            select.disabled = true;\n        }\n    \n        return select.outerHTML;\n    },\n\n    renderYearsList = function(date, opts)\n    {\n        var d = moment(date),\n            select = document.createElement('select'),\n            years = opts.dropdowns && opts.dropdowns.years ? opts.dropdowns.years : null,\n            minYear = years && years.min ? years.min : 1900,\n            maxYear = years && years.max ? years.max : Number.parseInt(moment().format('YYYY'));\n\n        if (Number.parseInt(date.format('YYYY')) < minYear) {\n            minYear = Number.parseInt(date.format('YYYY'));\n        }\n\n        if (Number.parseInt(date.format('YYYY')) > maxYear) {\n            maxYear = Number.parseInt(date.format('YYYY'));\n        }\n\n        for (var idx = minYear; idx <= maxYear; idx++) {\n            d.set('year', idx);\n\n            var option = document.createElement('option');\n            option.value = d.toDate().getFullYear();\n            option.text = d.toDate().getFullYear();\n\n            if (idx === date.toDate().getFullYear()) {\n                option.setAttribute('selected', 'selected');\n            }\n\n            select.appendChild(option);\n        }\n\n        select.className = 'lightpick__select lightpick__select-years';\n\n        if (!opts.dropdowns || !opts.dropdowns.years) {\n            select.disabled = true;\n        }\n\n        return select.outerHTML;\n    },\n\n    renderCalendar = function(el, opts)\n    {\n        var html = '',\n            monthDate = moment(opts.calendar[0]);\n\n        for (var i = 0; i < opts.numberOfMonths; i++) {\n            var day = moment(monthDate);\n\n            html += '<section class=\"lightpick__month\">';\n            html += '<header class=\"lightpick__month-title-bar\">'\n            html += '<div class=\"lightpick__month-title\">'\n            + renderMonthsList(day, opts)\n            + renderYearsList(day, opts)\n            + '</div>';\n\n            if (opts.numberOfMonths === 1) {\n                html += renderTopButtons(opts, 'days');\n            }\n\n            html += '</header>'; // lightpick__month-title-bar\n\n            html += '<div class=\"lightpick__days-of-the-week\">';\n            for (var w = opts.firstDay + 4; w < 7 + opts.firstDay + 4; ++w) {\n                html += '<div class=\"lightpick__day-of-the-week\" title=\"' + weekdayName(opts, w) + '\">' + weekdayName(opts, w, true) + '</div>';\n            }\n            html += '</div>'; // lightpick__days-of-the-week\n\n            html += '<div class=\"lightpick__days\">';\n\n            if (day.isoWeekday() !== opts.firstDay) {\n                var prevDays = day.isoWeekday() - opts.firstDay > 0 ? day.isoWeekday() - opts.firstDay : day.isoWeekday(),\n                    prevMonth = moment(day).subtract(prevDays, 'day'),\n                    daysInMonth = prevMonth.daysInMonth();\n\n                for (var d = prevMonth.get('date'); d <= daysInMonth; d++) {\n                    html += renderDay(opts, prevMonth, i > 0, 'is-previous-month');\n\n                    prevMonth.add(1, 'day');\n                }\n            }\n\n            var daysInMonth = day.daysInMonth(),\n                today = new Date();\n\n            for (var d = 0; d < daysInMonth; d++) {\n                html += renderDay(opts, day);\n\n                day.add(1, 'day');\n            }\n\n            var nextMonth = moment(day),\n                nextDays = 7 - nextMonth.isoWeekday() + opts.firstDay;\n\n            if (nextDays < 7) {\n                for (var d = nextMonth.get('date'); d <= nextDays; d++) {\n                    html += renderDay(opts, nextMonth, i < opts.numberOfMonths - 1, 'is-next-month');\n\n                    nextMonth.add(1, 'day');\n                }\n            }\n\n            html += '</div>'; // lightpick__days\n\n            html += '</section>'; // lightpick__month\n\n            monthDate.add(1, 'month');\n        }\n\n        opts.calendar[1] = moment(monthDate);\n\n        el.querySelector('.lightpick__months').innerHTML = html;\n    },\n\n    updateDates = function(el, opts)\n    {\n        var days = el.querySelectorAll('.lightpick__day');\n        [].forEach.call(days, function(day) {\n            day.outerHTML = renderDay(opts, parseInt(day.getAttribute('data-time')), false, day.className.split(' '));\n        });\n\n        checkDisabledDatesInRange(el, opts);\n    },\n\n    checkDisabledDatesInRange = function(el, opts)\n    {\n        if (opts.disabledDatesInRange || !opts.startDate || opts.endDate || !opts.disableDates) return;\n\n        var days = el.querySelectorAll('.lightpick__day'),\n            disabledArray = opts.disableDates.map(function(entry){\n                return entry instanceof Array || Object.prototype.toString.call(entry) === '[object Array]' ? entry[0] : entry;\n            }),\n            closestPrev = moment(disabledArray.filter(function(d) {\n                return moment(d).isBefore(opts.startDate);\n            }).sort(function(a,b){\n                return moment(b).isAfter(moment(a));\n            })[0]),\n            closestNext = moment(disabledArray.filter(function(d) {\n                return moment(d).isAfter(opts.startDate);\n            }).sort(function(a,b){\n                return moment(a).isAfter(moment(b));\n            })[0]);\n\n        [].forEach.call(days, function(dayCell) {\n            var day = moment(parseInt(dayCell.getAttribute('data-time')));\n            if (\n                (closestPrev && day.isBefore(closestPrev) && opts.startDate.isAfter(closestPrev))\n                || (closestNext && day.isAfter(closestNext) && closestNext.isAfter(opts.startDate))\n            ) {\n                dayCell.classList.remove('is-available');\n                dayCell.classList.add('is-disabled');\n            }\n        });\n    },\n\n    Lightpick = function(options)\n    {\n        var self = this,\n            opts = self.config(options);\n\n        self.el = document.createElement('section');\n\n        self.el.className = 'lightpick lightpick--' + opts.numberOfColumns + '-columns is-hidden';\n\n        if (opts.inline) {\n            self.el.className += ' lightpick--inlined';\n        }\n\n        var html = '<div class=\"lightpick__inner\">'\n        + (opts.numberOfMonths > 1 ? renderTopButtons(opts, 'days') : '')\n        + '<div class=\"lightpick__months\"></div>'\n        + '<div class=\"lightpick__tooltip\" style=\"visibility: hidden\"></div>';\n\n        if (opts.footer) {\n            html += '<div class=\"lightpick__footer\">';\n            if (opts.footer === true) {\n                html += '<button type=\"button\" class=\"lightpick__reset-action\">' + opts.locale.buttons.reset + '</button>';\n                html += '<div class=\"lightpick__footer-message\"></div>';\n                html += '<button type=\"button\" class=\"lightpick__apply-action\">' + opts.locale.buttons.apply + '</button>';\n            }\n            else {\n                html += opts.footer;\n            }\n            html += '</div>';\n        }\n\n        html += '</div>';\n\n        self.el.innerHTML = html;\n\n\n        if (opts.parentEl instanceof Node) {\n            opts.parentEl.appendChild(self.el)\n        } \n        else if (opts.parentEl === 'body' && opts.inline) {\n            opts.field.parentNode.appendChild(self.el);\n        }\n        else {\n            document.querySelector(opts.parentEl).appendChild(self.el);\n        }\n\n        self._onMouseDown = function(e)\n        {\n            if (!self.isShowing) {\n                return;\n            }\n\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            e.stopPropagation();\n\n            if (!target.classList.contains('lightpick__select')) {\n                e.preventDefault();\n            }\n\n            var opts = self._opts;\n\n            if (target.classList.contains('lightpick__day') && target.classList.contains('is-available')) {\n\n                var day = moment(parseInt(target.getAttribute('data-time')));\n\n                if (!opts.disabledDatesInRange && opts.disableDates && opts.startDate) {\n                    var start = day.isAfter(opts.startDate) ? moment(opts.startDate) : moment(day),\n                        end = day.isAfter(opts.startDate) ? moment(day) : moment(opts.startDate),\n\n                        isInvalidRange = opts.disableDates.filter(function(d) {\n                        if (d instanceof Array || Object.prototype.toString.call(d) === '[object Array]') {\n                            var _from = moment(d[0]),\n                                _to = moment(d[1]);\n\n                            return _from.isValid() && _to.isValid() && (_from.isBetween(start, end, 'day', '[]') || _to.isBetween(start, end, 'day', '[]'));\n                        }\n\n                        return moment(d).isBetween(start, end, 'day', '[]');\n                    });\n\n                    if (isInvalidRange.length) {\n                        self.setStartDate(null);\n                        self.setEndDate(null);\n\n                        target.dispatchEvent(new Event('mousedown'));\n                        self.el.querySelector('.lightpick__tooltip').style.visibility = 'hidden';\n\n                        updateDates(self.el, opts);\n                        return;\n                    }\n                }\n\n                if (opts.singleDate || (!opts.startDate && !opts.endDate) || (opts.startDate && opts.endDate)) {\n                    if (opts.repick && opts.startDate && opts.endDate) {\n                        if (opts.repickTrigger === opts.field) {\n                            self.setStartDate(day);\n                            target.classList.add('is-start-date');\n                        }\n                        else {\n                            self.setEndDate(day);\n                            target.classList.add('is-end-date');\n                        }\n\n                        if (opts.startDate.isAfter(opts.endDate)) {\n                            self.swapDate();\n                        }\n\n                        if (opts.autoclose) {\n                            setTimeout(function() {\n                                self.hide();\n                            }, 100);\n                        }\n                    }\n                    else {\n                        self.setStartDate(day);\n                        self.setEndDate(null);\n\n                        target.classList.add('is-start-date');\n\n                        if (opts.singleDate && opts.autoclose) {\n                            setTimeout(function() {\n                                self.hide();\n                            }, 100);\n                        }\n                        else if (!opts.singleDate || opts.inline) {\n                            updateDates(self.el, opts);\n                        }\n                    }\n                }\n                else if (opts.startDate && !opts.endDate) {\n                    self.setEndDate(day);\n\n                    if (opts.startDate.isAfter(opts.endDate)) {\n                        self.swapDate();\n                    }\n\n                    target.classList.add('is-end-date');\n\n\n                    if (opts.autoclose) {\n                        setTimeout(function() {\n                            self.hide();\n                        }, 100);\n                    }\n                    else {\n                        updateDates(self.el, opts);\n                    }\n                }\n\n                if (!opts.disabledDatesInRange) {\n                    if (self.el.querySelectorAll('.lightpick__day.is-available').length === 0) {\n                        self.setStartDate(null);\n                        updateDates(self.el, opts);\n\n                        if (opts.footer) {\n                            if (typeof self._opts.onError === 'function') {\n                                self._opts.onError.call(self, 'Invalid range');\n                            }\n                            else {\n                                var footerMessage = self.el.querySelector('.lightpick__footer-message');\n\n                                if (footerMessage) {\n                                    footerMessage.innerHTML = opts.locale.not_allowed_range;\n\n                                    setTimeout(function(){\n                                        footerMessage.innerHTML = '';\n                                    }, 3000);\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            else if (target.classList.contains('lightpick__previous-action')) {\n                self.prevMonth();\n            }\n            else if (target.classList.contains('lightpick__next-action')) {\n                self.nextMonth();\n            }\n            else if (target.classList.contains('lightpick__close-action') || target.classList.contains('lightpick__apply-action')) {\n                self.hide();\n            }\n            else if (target.classList.contains('lightpick__reset-action')) {\n                self.reset();\n            }\n        };\n        self._onMouseEnter = function(e)\n        {\n            if (!self.isShowing) {\n                return;\n            }\n\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            var opts = self._opts;\n\n            if (target.classList.contains('lightpick__day') && target.classList.contains('disabled-tooltip') && opts.locale.tooltipOnDisabled) {\n                self.showTooltip(target, opts.locale.tooltipOnDisabled);\n                return;\n            }\n            else {\n                self.hideTooltip();\n            }\n\n            if (opts.singleDate || (!opts.startDate && !opts.endDate)) {\n                return;\n            }\n\n            if (!target.classList.contains('lightpick__day') && !target.classList.contains('is-available')) {\n                return;\n            }\n\n            if ((opts.startDate && !opts.endDate) || opts.repick) {\n                var hoverDate = moment(parseInt(target.getAttribute('data-time')));\n\n                if (!hoverDate.isValid()) {\n                    return;\n                }\n\n                var startDate = (opts.startDate && !opts.endDate) || (opts.repick && opts.repickTrigger === opts.secondField) ? opts.startDate : opts.endDate;\n\n                var days = self.el.querySelectorAll('.lightpick__day');\n                [].forEach.call(days, function(day) {\n                    var dt = moment(parseInt(day.getAttribute('data-time')));\n\n                    day.classList.remove('is-flipped');\n\n                    if (dt.isValid() && dt.isSameOrAfter(startDate, 'day') && dt.isSameOrBefore(hoverDate, 'day')) {\n                        day.classList.add('is-in-range');\n\n                        if (opts.repickTrigger === opts.field && dt.isSameOrAfter(opts.endDate)) {\n                            day.classList.add('is-flipped');\n                        }\n                    }\n                    else if (dt.isValid() && dt.isSameOrAfter(hoverDate, 'day') && dt.isSameOrBefore(startDate, 'day')) {\n                        day.classList.add('is-in-range');\n\n                        if (((opts.startDate && !opts.endDate) || opts.repickTrigger === opts.secondField) && dt.isSameOrBefore(opts.startDate)) {\n                            day.classList.add('is-flipped');\n                        }\n                    }\n                    else {\n                        day.classList.remove('is-in-range');\n                    }\n\n                    if (opts.startDate && opts.endDate && opts.repick && opts.repickTrigger === opts.field) {\n                        day.classList.remove('is-start-date');\n                    }\n                    else {\n                        day.classList.remove('is-end-date');\n                    }\n                });\n\n                if (opts.hoveringTooltip) {\n                    days = Math.abs(hoverDate.isAfter(startDate) ? hoverDate.diff(startDate, 'day') : startDate.diff(hoverDate, 'day'));\n\n                    if (!opts.tooltipNights) {\n                        days += 1;\n                    }\n\n                    var tooltip = self.el.querySelector('.lightpick__tooltip');\n\n                    if (days > 0 && !target.classList.contains('is-disabled')) {\n\n                        var pluralText = '';\n                        if (typeof opts.locale.pluralize === 'function') {\n                            pluralText = opts.locale.pluralize.call(self, days, opts.locale.tooltip);\n                        }\n\n                        self.showTooltip(target, days + ' ' + pluralText);\n                    }\n                    else {\n                        self.hideTooltip();\n                    }\n                }\n\n                if (opts.startDate && opts.endDate && opts.repick && opts.repickTrigger === opts.field) {\n                    target.classList.add('is-start-date');\n                }\n                else {\n                    target.classList.add('is-end-date');\n                }\n            }\n        };\n        self._onChange = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            if (target.classList.contains('lightpick__select-months')) {\n                self.gotoMonth(target.value);\n            }\n            else if (target.classList.contains('lightpick__select-years')) {\n                self.gotoYear(target.value);\n            }\n        };\n\n        self._onInputChange = function(e)\n        {\n            var target = e.target || e.srcElement;\n\n            if (self._opts.singleDate) {\n                if (!self._opts.autoclose) {\n                    self.gotoDate(opts.field.value);\n                }\n            }\n\n            self.syncFields();\n\n            if (!self.isShowing) {\n                self.show();\n            }\n        };\n\n        self._onInputFocus = function(e)\n        {\n            var target = e.target || e.srcElement;\n\n            self.show(target);\n        };\n\n        self._onInputClick = function(e)\n        {\n            var target = e.target || e.srcElement;\n\n            self.show(target);\n        };\n\n        self._onClick = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement,\n                parentEl = target;\n\n            if (!target) {\n                return;\n            }\n\n            do {\n                if ((parentEl.classList && parentEl.classList.contains('lightpick')) || parentEl === opts.field || (opts.secondField && parentEl === opts.secondField)) {\n                    return;\n                }\n            }\n            while ((parentEl = parentEl.parentNode));\n\n            if (self.isShowing && opts.hideOnBodyClick && target !== opts.field && parentEl !== opts.field) {\n                self.hide();\n            }\n        };\n\n        self.showTooltip = function(target, text)\n        {\n            var tooltip = self.el.querySelector('.lightpick__tooltip');\n\n            var hasParentEl = self.el.classList.contains('lightpick--inlined'),\n            dayBounding = target.getBoundingClientRect(),\n            pickerBouding = hasParentEl ? self.el.parentNode.getBoundingClientRect() : self.el.getBoundingClientRect(),\n            _left = (dayBounding.left - pickerBouding.left) + (dayBounding.width / 2),\n            _top = dayBounding.top - pickerBouding.top;\n\n            tooltip.style.visibility = 'visible';\n            tooltip.textContent = text;\n\n            var tooltipBounding = tooltip.getBoundingClientRect();\n\n            _top -= tooltipBounding.height;\n            _left -= (tooltipBounding.width / 2);\n\n            setTimeout(function(){\n                tooltip.style.top = _top + 'px';\n                tooltip.style.left = _left + 'px';\n            }, 10);\n        };\n\n        self.hideTooltip = function()\n        {\n            var tooltip = self.el.querySelector('.lightpick__tooltip');\n            tooltip.style.visibility = 'hidden';\n        };\n\n        self.el.addEventListener('mousedown', self._onMouseDown, true);\n        self.el.addEventListener('mouseenter', self._onMouseEnter, true);\n        self.el.addEventListener('touchend', self._onMouseDown, true);\n        self.el.addEventListener('change', self._onChange, true);\n\n        if (opts.inline) {\n            self.show();\n        }\n        else {\n            self.hide();\n        }\n\n        opts.field.addEventListener('change', self._onInputChange);\n        opts.field.addEventListener('click', self._onInputClick);\n        opts.field.addEventListener('focus', self._onInputFocus);\n\n        if (opts.secondField) {\n            opts.secondField.addEventListener('change', self._onInputChange);\n            opts.secondField.addEventListener('click', self._onInputClick);\n            opts.secondField.addEventListener('focus', self._onInputFocus);\n        }\n    };\n\n    Lightpick.prototype = {\n        config: function(options)\n        {\n            var opts = Object.assign({}, defaults, options);\n\n            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n            opts.calendar = [moment().set('date', 1)];\n\n            if (opts.numberOfMonths === 1 && opts.numberOfColumns > 1) {\n                opts.numberOfColumns = 1;\n            }\n\n            opts.minDate = opts.minDate && moment(opts.minDate).isValid() ? moment(opts.minDate) : null;\n\n            opts.maxDate = opts.maxDate && moment(opts.maxDate).isValid() ? moment(opts.maxDate) : null;\n\n            if (opts.lang === 'auto') {\n                var browserLang = navigator.language || navigator.userLanguage;\n                if (browserLang) {\n                    opts.lang = browserLang;\n                }\n                else {\n                    opts.lang = 'en-US';\n                }\n            }\n\n            if (opts.secondField && opts.singleDate) {\n                opts.singleDate = false;\n            }\n\n            if (opts.hoveringTooltip && opts.singleDate) {\n                opts.hoveringTooltip = false;\n            }\n\n            if (Object.prototype.toString.call(options.locale) === '[object Object]') {\n                opts.locale = Object.assign({}, defaults.locale, options.locale);\n            }\n\n            if (window.innerWidth < 480 && opts.numberOfMonths > 1) {\n                opts.numberOfMonths = 1;\n                opts.numberOfColumns = 1;\n            }\n\n            if (opts.repick && !opts.secondField) {\n                opts.repick = false;\n            }\n\n            if (opts.inline) {\n                opts.autoclose = false;\n                opts.hideOnBodyClick = false;\n            }\n\n            this._opts = Object.assign({}, opts);\n\n            this.syncFields();\n\n            this.setStartDate(this._opts.startDate, true);\n            this.setEndDate(this._opts.endDate, true);\n\n            return this._opts;\n        },\n\n        syncFields: function()\n        {\n            if (this._opts.singleDate || this._opts.secondField) {\n                if (moment(this._opts.field.value, this._opts.format).isValid()) {\n                    this._opts.startDate = moment(this._opts.field.value, this._opts.format);\n                }\n\n                if (this._opts.secondField && moment(this._opts.secondField.value, this._opts.format).isValid()) {\n                    this._opts.endDate = moment(this._opts.secondField.value, this._opts.format);\n                }\n            }\n            else {\n                var dates = this._opts.field.value.split(this._opts.separator);\n\n                if (dates.length === 2) {\n                    if (moment(dates[0], this._opts.format).isValid()) {\n                        this._opts.startDate = moment(dates[0], this._opts.format);\n                    }\n\n                    if (moment(dates[1], this._opts.format).isValid()) {\n                        this._opts.endDate = moment(dates[1], this._opts.format);\n                    }\n                }\n            }\n        },\n\n        swapDate: function()\n        {\n            var tmp = moment(this._opts.startDate);\n            this.setDateRange(this._opts.endDate, tmp);\n        },\n\n        gotoToday: function()\n        {\n            this.gotoDate(new Date());\n        },\n\n        gotoDate: function(date)\n        {\n            var date = moment(date);\n\n            if (!date.isValid()) {\n                date = moment();\n            }\n\n            date.set('date', 1);\n\n            this._opts.calendar = [moment(date)];\n\n            renderCalendar(this.el, this._opts);\n        },\n\n        gotoMonth: function(month)\n        {\n            if (isNaN(month)) {\n                return;\n            }\n\n            this._opts.calendar[0].set('month', month);\n\n            renderCalendar(this.el, this._opts);\n        },\n\n        gotoYear: function(year)\n        {\n            if (isNaN(year)) {\n                return;\n            }\n\n            this._opts.calendar[0].set('year', year);\n\n            renderCalendar(this.el, this._opts);\n        },\n\n        prevMonth: function()\n        {\n            this._opts.calendar[0] = moment(this._opts.calendar[0]).subtract(this._opts.numberOfMonths, 'month');\n\n            renderCalendar(this.el, this._opts);\n\n            checkDisabledDatesInRange(this.el, this._opts);\n        },\n\n        nextMonth: function()\n        {\n            this._opts.calendar[0] = moment(this._opts.calendar[1]);\n\n            renderCalendar(this.el, this._opts);\n\n            checkDisabledDatesInRange(this.el, this._opts);\n        },\n\n        updatePosition: function()\n        {\n            if (this.el.classList.contains('lightpick--inlined')) return;\n\n            // remove `is-hidden` class for getBoundingClientRect\n            this.el.classList.remove('is-hidden');\n\n            var rect = this._opts.field.getBoundingClientRect(),\n                calRect = this.el.getBoundingClientRect(),\n                orientation = this._opts.orientation.split(' '),\n                top = 0,\n                left = 0;\n\n            if (orientation[0] == 'auto' || !(/top|bottom/.test(orientation[0]))) {\n                if (rect.bottom + calRect.height > window.innerHeight && window.pageYOffset > calRect.height) {\n                    top = (rect.top + window.pageYOffset) - calRect.height;\n                }\n                else {\n                    top = rect.bottom + window.pageYOffset;\n                }\n            }\n            else {\n                top = rect[orientation[0]] + window.pageYOffset;\n\n                if (orientation[0] == 'top') {\n                    top -= calRect.height;\n                }\n            }\n\n            if (!(/left|right/.test(orientation[0])) && (!orientation[1] || orientation[1] == 'auto' || !(/left|right/.test(orientation[1])))) {\n                if (rect.left + calRect.width > window.innerWidth) {\n                    left = (rect.right + window.pageXOffset) - calRect.width;\n                }\n                else {\n                    left = rect.left + window.pageXOffset;\n                }\n            }\n            else {\n                if (/left|right/.test(orientation[0])) {\n                    left = rect[orientation[0]] + window.pageXOffset;\n                }\n                else {\n                    left = rect[orientation[1]] + window.pageXOffset;\n                }\n\n                if (orientation[0] == 'right' || orientation[1] == 'right') {\n                    left -= calRect.width;\n                }\n            }\n\n            this.el.classList.add('is-hidden');\n\n            this.el.style.top = top + 'px';\n            this.el.style.left = left + 'px';\n        },\n\n        setStartDate: function(date, preventOnSelect)\n        {\n            var dateISO = moment(date, moment.ISO_8601),\n                dateOptFormat = moment(date, this._opts.format);\n\n            if (!dateISO.isValid() && !dateOptFormat.isValid()) {\n                this._opts.startDate = null;\n                this._opts.field.value = '';\n                return;\n            }\n\n            this._opts.startDate = moment(dateISO.isValid() ? dateISO : dateOptFormat);\n\n            if (this._opts.singleDate || this._opts.secondField) {\n                this._opts.field.value = this._opts.startDate.format(this._opts.format);\n            }\n            else {\n                this._opts.field.value = this._opts.startDate.format(this._opts.format) + this._opts.separator + '...'\n            }\n\n            if (!preventOnSelect && typeof this._opts.onSelect === 'function') {\n                this._opts.onSelect.call(this, this.getStartDate(), this.getEndDate());\n            }\n        },\n\n        setEndDate: function(date, preventOnSelect)\n        {\n            var dateISO = moment(date, moment.ISO_8601),\n                dateOptFormat = moment(date, this._opts.format);\n\n            if (!dateISO.isValid() && !dateOptFormat.isValid()) {\n                this._opts.endDate = null;\n\n                if (this._opts.secondField) {\n                    this._opts.secondField.value = '';\n                }\n                else if (!this._opts.singleDate && this._opts.startDate) {\n                    this._opts.field.value = this._opts.startDate.format(this._opts.format) + this._opts.separator + '...'\n                }\n                return;\n            }\n\n            this._opts.endDate = moment(dateISO.isValid() ? dateISO : dateOptFormat);\n\n            if (this._opts.secondField) {\n                this._opts.field.value = this._opts.startDate.format(this._opts.format);\n                this._opts.secondField.value = this._opts.endDate.format(this._opts.format);\n            }\n            else {\n                this._opts.field.value = this._opts.startDate.format(this._opts.format) + this._opts.separator + this._opts.endDate.format(this._opts.format);\n            }\n\n            if (!preventOnSelect && typeof this._opts.onSelect === 'function') {\n                this._opts.onSelect.call(this, this.getStartDate(), this.getEndDate());\n            }\n        },\n\n        setDate: function(date, preventOnSelect)\n        {\n            if (!this._opts.singleDate) {\n                return;\n            }\n            this.setStartDate(date, preventOnSelect);\n\n            if (this.isShowing) {\n                updateDates(this.el, this._opts);\n            }\n        },\n\n        setDateRange: function(start, end, preventOnSelect)\n        {\n            if (this._opts.singleDate) {\n                return;\n            }\n            this.setStartDate(start, true);\n            this.setEndDate(end, true);\n\n            if (this.isShowing) {\n                updateDates(this.el, this._opts);\n            }\n\n            if (!preventOnSelect && typeof this._opts.onSelect === 'function') {\n                this._opts.onSelect.call(this, this.getStartDate(), this.getEndDate());\n            }\n        },\n\n        setDisableDates: function(dates)\n        {\n            this._opts.disableDates = dates;\n\n            if (this.isShowing) {\n                updateDates(this.el, this._opts);\n            }\n        },\n\n        getStartDate: function()\n        {\n            return moment(this._opts.startDate).isValid() ? this._opts.startDate : null;\n        },\n\n        getEndDate: function()\n        {\n            return moment(this._opts.endDate).isValid() ? this._opts.endDate : null;\n        },\n\n        getDate: function()\n        {\n            return moment(this._opts.startDate).isValid() ? this._opts.startDate : null;\n        },\n\n        toString: function(format)\n        {\n            if (this._opts.singleDate) {\n                return moment(this._opts.startDate).isValid() ? this._opts.startDate.format(format) : '';\n            }\n\n            if (moment(this._opts.startDate).isValid() && moment(this._opts.endDate).isValid()) {\n                return this._opts.startDate.format(format) + this._opts.separator + this._opts.endDate.format(format);\n            }\n\n            if (moment(this._opts.startDate).isValid() && !moment(this._opts.endDate).isValid()) {\n                return this._opts.startDate.format(format) + this._opts.separator + '...';\n            }\n\n            if (!moment(this._opts.startDate).isValid() && moment(this._opts.endDate).isValid()) {\n                return '...' + this._opts.separator + this._opts.endDate.format(format);\n            }\n\n            return '';\n        },\n\n        show: function(target)\n        {\n            if (!this.isShowing) {\n                this.isShowing = true;\n\n                if (this._opts.repick) {\n                    this._opts.repickTrigger = target;\n                }\n\n                this.syncFields();\n                \n                if (this._opts.secondField && this._opts.secondField === target && this._opts.endDate) {\n                    this.gotoDate(this._opts.endDate);\n                }\n                else {\n                    this.gotoDate(this._opts.startDate);\n                }\n\n                document.addEventListener('click', this._onClick);\n\n                this.updatePosition();\n\n                this.el.classList.remove('is-hidden');\n\n                if (typeof this._opts.onOpen === 'function') {\n                    this._opts.onOpen.call(this);\n                }\n\n                if (document.activeElement && document.activeElement != document.body) {\n                    document.activeElement.blur();\n                }\n            }\n        },\n\n        hide: function()\n        {\n            if (this.isShowing) {\n                this.isShowing = false;\n\n                document.removeEventListener('click', this._onClick);\n\n                this.el.classList.add('is-hidden');\n\n                this.el.querySelector('.lightpick__tooltip').style.visibility = 'hidden';\n\n                if (typeof this._opts.onClose === 'function') {\n                    this._opts.onClose.call(this);\n                }\n            }\n        },\n\n        destroy: function()\n        {\n            var opts = this._opts;\n\n            this.hide();\n\n            this.el.removeEventListener('mousedown', self._onMouseDown, true);\n            this.el.removeEventListener('mouseenter', self._onMouseEnter, true);\n            this.el.removeEventListener('touchend', self._onMouseDown, true);\n            this.el.removeEventListener('change', self._onChange, true);\n\n            opts.field.removeEventListener('change', this._onInputChange);\n            opts.field.removeEventListener('click', this._onInputClick);\n            opts.field.removeEventListener('focus', this._onInputFocus);\n\n            if (opts.secondField) {\n                opts.secondField.removeEventListener('change', this._onInputChange);\n                opts.secondField.removeEventListener('click', this._onInputClick);\n                opts.secondField.removeEventListener('focus', this._onInputFocus);\n            }\n\n            if (this.el.parentNode) {\n                this.el.parentNode.removeChild(this.el);\n            }\n        },\n\n        reset: function()\n        {\n            this.setStartDate(null, true);\n            this.setEndDate(null, true);\n\n            updateDates(this.el, this._opts);\n\n            if (typeof this._opts.onSelect === 'function') {\n                this._opts.onSelect.call(this, this.getStartDate(), this.getEndDate());\n            }\n\n            this.el.querySelector('.lightpick__tooltip').style.visibility = 'hidden';\n        },\n\n        reloadOptions: function(options)\n        {\n            this._opts = Object.assign({}, this._opts, options);\n        }\n\n    };\n\n    return Lightpick;\n}));\n","/*! modernizr 3.5.0 (Custom Build) | MIT *\n * https://modernizr.com/download/?-cssanimations-setclasses !*/\n!function(e,n,t){function r(e,n){return typeof e===n}function o(){var e,n,t,o,s,i,a;for(var l in S)if(S.hasOwnProperty(l)){if(e=[],n=S[l],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;t<n.options.aliases.length;t++)e.push(n.options.aliases[t].toLowerCase());for(o=r(n.fn,\"function\")?n.fn():n.fn,s=0;s<e.length;s++)i=e[s],a=i.split(\".\"),1===a.length?Modernizr[a[0]]=o:(!Modernizr[a[0]]||Modernizr[a[0]]instanceof Boolean||(Modernizr[a[0]]=new Boolean(Modernizr[a[0]])),Modernizr[a[0]][a[1]]=o),C.push((o?\"\":\"no-\")+a.join(\"-\"))}}function s(e){var n=_.className,t=Modernizr._config.classPrefix||\"\";if(x&&(n=n.baseVal),Modernizr._config.enableJSClass){var r=new RegExp(\"(^|\\\\s)\"+t+\"no-js(\\\\s|$)\");n=n.replace(r,\"$1\"+t+\"js$2\")}Modernizr._config.enableClasses&&(n+=\" \"+t+e.join(\" \"+t),x?_.className.baseVal=n:_.className=n)}function i(){return\"function\"!=typeof n.createElement?n.createElement(arguments[0]):x?n.createElementNS.call(n,\"http://www.w3.org/2000/svg\",arguments[0]):n.createElement.apply(n,arguments)}function a(e,n){return!!~(\"\"+e).indexOf(n)}function l(e){return e.replace(/([a-z])-([a-z])/g,function(e,n,t){return n+t.toUpperCase()}).replace(/^-/,\"\")}function u(){var e=n.body;return e||(e=i(x?\"svg\":\"body\"),e.fake=!0),e}function f(e,t,r,o){var s,a,l,f,c=\"modernizr\",d=i(\"div\"),p=u();if(parseInt(r,10))for(;r--;)l=i(\"div\"),l.id=o?o[r]:c+(r+1),d.appendChild(l);return s=i(\"style\"),s.type=\"text/css\",s.id=\"s\"+c,(p.fake?p:d).appendChild(s),p.appendChild(d),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(n.createTextNode(e)),d.id=c,p.fake&&(p.style.background=\"\",p.style.overflow=\"hidden\",f=_.style.overflow,_.style.overflow=\"hidden\",_.appendChild(p)),a=t(d,e),p.fake?(p.parentNode.removeChild(p),_.style.overflow=f,_.offsetHeight):d.parentNode.removeChild(d),!!a}function c(e,n){return function(){return e.apply(n,arguments)}}function d(e,n,t){var o;for(var s in e)if(e[s]in n)return t===!1?e[s]:(o=n[e[s]],r(o,\"function\")?c(o,t||n):o);return!1}function p(n,t,r){var o;if(\"getComputedStyle\"in e){o=getComputedStyle.call(e,n,t);var s=e.console;if(null!==o)r&&(o=o.getPropertyValue(r));else if(s){var i=s.error?\"error\":\"log\";s[i].call(s,\"getComputedStyle returning null, its possible modernizr test results are inaccurate\")}}else o=!t&&n.currentStyle&&n.currentStyle[r];return o}function m(e){return e.replace(/([A-Z])/g,function(e,n){return\"-\"+n.toLowerCase()}).replace(/^ms-/,\"-ms-\")}function y(n,r){var o=n.length;if(\"CSS\"in e&&\"supports\"in e.CSS){for(;o--;)if(e.CSS.supports(m(n[o]),r))return!0;return!1}if(\"CSSSupportsRule\"in e){for(var s=[];o--;)s.push(\"(\"+m(n[o])+\":\"+r+\")\");return s=s.join(\" or \"),f(\"@supports (\"+s+\") { #modernizr { position: absolute; } }\",function(e){return\"absolute\"==p(e,null,\"position\")})}return t}function v(e,n,o,s){function u(){c&&(delete N.style,delete N.modElem)}if(s=r(s,\"undefined\")?!1:s,!r(o,\"undefined\")){var f=y(e,o);if(!r(f,\"undefined\"))return f}for(var c,d,p,m,v,g=[\"modernizr\",\"tspan\",\"samp\"];!N.style&&g.length;)c=!0,N.modElem=i(g.shift()),N.style=N.modElem.style;for(p=e.length,d=0;p>d;d++)if(m=e[d],v=N.style[m],a(m,\"-\")&&(m=l(m)),N.style[m]!==t){if(s||r(o,\"undefined\"))return u(),\"pfx\"==n?m:!0;try{N.style[m]=o}catch(h){}if(N.style[m]!=v)return u(),\"pfx\"==n?m:!0}return u(),!1}function g(e,n,t,o,s){var i=e.charAt(0).toUpperCase()+e.slice(1),a=(e+\" \"+P.join(i+\" \")+i).split(\" \");return r(n,\"string\")||r(n,\"undefined\")?v(a,n,o,s):(a=(e+\" \"+z.join(i+\" \")+i).split(\" \"),d(a,n,t))}function h(e,n,r){return g(e,t,t,n,r)}var C=[],S=[],w={_version:\"3.5.0\",_config:{classPrefix:\"\",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){S.push({name:e,fn:n,options:t})},addAsyncTest:function(e){S.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=w,Modernizr=new Modernizr;var _=n.documentElement,x=\"svg\"===_.nodeName.toLowerCase(),b=\"Moz O ms Webkit\",P=w._config.usePrefixes?b.split(\" \"):[];w._cssomPrefixes=P;var z=w._config.usePrefixes?b.toLowerCase().split(\" \"):[];w._domPrefixes=z;var E={elem:i(\"modernizr\")};Modernizr._q.push(function(){delete E.elem});var N={style:E.elem.style};Modernizr._q.unshift(function(){delete N.style}),w.testAllProps=g,w.testAllProps=h,Modernizr.addTest(\"cssanimations\",h(\"animationName\",\"a\",!0)),o(),s(C),delete w.addTest,delete w.addAsyncTest;for(var T=0;T<Modernizr._q.length;T++)Modernizr._q[T]();e.Modernizr=Modernizr}(window,document);","/*\n* Nivo Lightbox v1.2.0\n* http://dev7studios.com/nivo-lightbox\n*\n* Copyright 2013, Dev7studios\n* Free to use and abuse under the MIT license.\n* http://www.opensource.org/licenses/mit-license.php\n*/\n(function(e,t,n,r){function o(t,n){this.el=t;this.$el=e(this.el);this.options=e.extend({},s,n);this._defaults=s;this._name=i;this.init()}var i=\"nivoLightbox\",s={effect:\"fade\",theme:\"default\",keyboardNav:true,clickOverlayToClose:true,onInit:function(){},beforeShowLightbox:function(){},afterShowLightbox:function(e){},beforeHideLightbox:function(){},afterHideLightbox:function(){},onPrev:function(e){},onNext:function(e){},errorMessage:\"The requested content cannot be loaded. Please try again later.\"};o.prototype={init:function(){var t=this;if(!e(\"html\").hasClass(\"nivo-lightbox-notouch\"))e(\"html\").addClass(\"nivo-lightbox-notouch\");if(\"ontouchstart\"in n)e(\"html\").removeClass(\"nivo-lightbox-notouch\");this.$el.on(\"click\",function(e){t.showLightbox(e)});if(this.options.keyboardNav){e(\"body\").off(\"keyup\").on(\"keyup\",function(n){var r=n.keyCode?n.keyCode:n.which;if(r==27)t.destructLightbox();if(r==37)e(\".nivo-lightbox-prev\").trigger(\"click\");if(r==39)e(\".nivo-lightbox-next\").trigger(\"click\")})}this.options.onInit.call(this)},showLightbox:function(t){var n=this,r=this.$el;var i=this.checkContent(r);if(!i)return;t.preventDefault();this.options.beforeShowLightbox.call(this);var s=this.constructLightbox();if(!s)return;var o=s.find(\".nivo-lightbox-content\");if(!o)return;e(\"body\").addClass(\"nivo-lightbox-body-effect-\"+this.options.effect);this.processContent(o,r);if(this.$el.attr(\"data-lightbox-gallery\")){var u=e('[data-lightbox-gallery=\"'+this.$el.attr(\"data-lightbox-gallery\")+'\"]');e(\".nivo-lightbox-nav\").show();e(\".nivo-lightbox-prev\").off(\"click\").on(\"click\",function(t){t.preventDefault();var i=u.index(r);r=u.eq(i-1);if(!e(r).length)r=u.last();n.processContent(o,r);n.options.onPrev.call(this,[r])});e(\".nivo-lightbox-next\").off(\"click\").on(\"click\",function(t){t.preventDefault();var i=u.index(r);r=u.eq(i+1);if(!e(r).length)r=u.first();n.processContent(o,r);n.options.onNext.call(this,[r])})}setTimeout(function(){s.addClass(\"nivo-lightbox-open\");n.options.afterShowLightbox.call(this,[s])},1)},checkContent:function(e){var t=this,n=e.attr(\"href\"),r=n.match(/(youtube|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/);if(n.match(/\\.(jpeg|jpg|gif|png)$/i)!==null){return true}else if(r){return true}else if(e.attr(\"data-lightbox-type\")==\"ajax\"){return true}else if(n.substring(0,1)==\"#\"&&e.attr(\"data-lightbox-type\")==\"inline\"){return true}else if(e.attr(\"data-lightbox-type\")==\"iframe\"){return true}return false},processContent:function(n,r){var i=this,s=r.attr(\"href\"),o=s.match(/(youtube|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/);n.html(\"\").addClass(\"nivo-lightbox-loading\");if(this.isHidpi()&&r.attr(\"data-lightbox-hidpi\")){s=r.attr(\"data-lightbox-hidpi\")}if(s.match(/\\.(jpeg|jpg|gif|png)$/i)!==null){var u=e(\"<img>\",{src:s});u.one(\"load\",function(){var r=e('<div class=\"nivo-lightbox-image\" />');r.append(u);n.html(r).removeClass(\"nivo-lightbox-loading\");r.css({\"line-height\":e(\".nivo-lightbox-content\").height()+\"px\",height:e(\".nivo-lightbox-content\").height()+\"px\"});e(t).resize(function(){r.css({\"line-height\":e(\".nivo-lightbox-content\").height()+\"px\",height:e(\".nivo-lightbox-content\").height()+\"px\"})})}).each(function(){if(this.complete)e(this).load()});u.error(function(){var t=e('<div class=\"nivo-lightbox-error\"><p>'+i.options.errorMessage+\"</p></div>\");n.html(t).removeClass(\"nivo-lightbox-loading\")})}else if(o){var a=\"\",f=\"nivo-lightbox-video\";if(o[1]==\"youtube\"){a=\"//www.youtube.com/embed/\"+o[4];f=\"nivo-lightbox-youtube\"}if(o[1]==\"youtu\"){a=\"//www.youtube.com/embed/\"+o[3];f=\"nivo-lightbox-youtube\"}if(o[1]==\"vimeo\"){a=\"//player.vimeo.com/video/\"+o[3];f=\"nivo-lightbox-vimeo\"}if(a){var l=e(\"<iframe>\",{src:a,\"class\":f,frameborder:0,vspace:0,hspace:0,scrolling:\"auto\"});n.html(l);l.load(function(){n.removeClass(\"nivo-lightbox-loading\")})}}else if(r.attr(\"data-lightbox-type\")==\"ajax\"){e.ajax({url:s,cache:false,success:function(r){var i=e('<div class=\"nivo-lightbox-ajax\" />');i.append(r);n.html(i).removeClass(\"nivo-lightbox-loading\");if(i.outerHeight()<n.height()){i.css({position:\"relative\",top:\"50%\",\"margin-top\":-(i.outerHeight()/2)+\"px\"})}e(t).resize(function(){if(i.outerHeight()<n.height()){i.css({position:\"relative\",top:\"50%\",\"margin-top\":-(i.outerHeight()/2)+\"px\"})}})},error:function(){var t=e('<div class=\"nivo-lightbox-error\"><p>'+i.options.errorMessage+\"</p></div>\");n.html(t).removeClass(\"nivo-lightbox-loading\")}})}else if(s.substring(0,1)==\"#\"&&r.attr(\"data-lightbox-type\")==\"inline\"){if(e(s).length){var c=e('<div class=\"nivo-lightbox-inline\" />');c.append(e(s).clone().show());n.html(c).removeClass(\"nivo-lightbox-loading\");if(c.outerHeight()<n.height()){c.css({position:\"relative\",top:\"50%\",\"margin-top\":-(c.outerHeight()/2)+\"px\"})}e(t).resize(function(){if(c.outerHeight()<n.height()){c.css({position:\"relative\",top:\"50%\",\"margin-top\":-(c.outerHeight()/2)+\"px\"})}})}else{var h=e('<div class=\"nivo-lightbox-error\"><p>'+i.options.errorMessage+\"</p></div>\");n.html(h).removeClass(\"nivo-lightbox-loading\")}}else if(r.attr(\"data-lightbox-type\")==\"iframe\"){var p=e(\"<iframe>\",{src:s,\"class\":\"nivo-lightbox-item\",frameborder:0,vspace:0,hspace:0,scrolling:\"auto\"});n.html(p);p.load(function(){n.removeClass(\"nivo-lightbox-loading\")})}else{return false}if(r.attr(\"title\")){var d=e(\"<span>\",{\"class\":\"nivo-lightbox-title\"});d.text(r.attr(\"title\"));e(\".nivo-lightbox-title-wrap\").html(d)}else{e(\".nivo-lightbox-title-wrap\").html(\"\")}},constructLightbox:function(){if(e(\".nivo-lightbox-overlay\").length)return e(\".nivo-lightbox-overlay\");var t=e(\"<div>\",{\"class\":\"nivo-lightbox-overlay nivo-lightbox-theme-\"+this.options.theme+\" nivo-lightbox-effect-\"+this.options.effect});var n=e(\"<div>\",{\"class\":\"nivo-lightbox-wrap\"});var r=e(\"<div>\",{\"class\":\"nivo-lightbox-content\"});var i=e('<a href=\"#\" class=\"nivo-lightbox-nav nivo-lightbox-prev\">Previous</a><a href=\"#\" class=\"nivo-lightbox-nav nivo-lightbox-next\">Next</a>');var s=e('<a href=\"#\" class=\"nivo-lightbox-close\" title=\"Close\">Close</a>');var o=e(\"<div>\",{\"class\":\"nivo-lightbox-title-wrap\"});var u=0;if(u)t.addClass(\"nivo-lightbox-ie\");n.append(r);n.append(o);t.append(n);t.append(i);t.append(s);e(\"body\").append(t);var a=this;if(a.options.clickOverlayToClose){t.on(\"click\",function(t){if(t.target===this||e(t.target).hasClass(\"nivo-lightbox-content\")||e(t.target).hasClass(\"nivo-lightbox-image\")){a.destructLightbox()}})}s.on(\"click\",function(e){e.preventDefault();a.destructLightbox()});return t},destructLightbox:function(){var t=this;this.options.beforeHideLightbox.call(this);e(\".nivo-lightbox-overlay\").removeClass(\"nivo-lightbox-open\");e(\".nivo-lightbox-nav\").hide();e(\"body\").removeClass(\"nivo-lightbox-body-effect-\"+t.options.effect);var n=0;if(n){e(\".nivo-lightbox-overlay iframe\").attr(\"src\",\" \");e(\".nivo-lightbox-overlay iframe\").remove()}e(\".nivo-lightbox-prev\").off(\"click\");e(\".nivo-lightbox-next\").off(\"click\");e(\".nivo-lightbox-content\").empty();this.options.afterHideLightbox.call(this)},isHidpi:function(){var e=\"(-webkit-min-device-pixel-ratio: 1.5),                              (min--moz-device-pixel-ratio: 1.5),                              (-o-min-device-pixel-ratio: 3/2),                              (min-resolution: 1.5dppx)\";if(t.devicePixelRatio>1)return true;if(t.matchMedia&&t.matchMedia(e).matches)return true;return false}};e.fn[i]=function(t){return this.each(function(){if(!e.data(this,i)){e.data(this,i,new o(this,t))}})}})(jQuery,window,document)\n","/*!\n * VERSION: 0.6.1\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport { _gsScope } from \"./TweenLite.js\";\n\nexport var AttrPlugin = _gsScope._gsDefine.plugin({\n\tpropName: \"attr\",\n\tAPI: 2,\n\tversion: \"0.6.1\",\n\n\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\tinit: function(target, value, tween, index) {\n\t\tvar p, end;\n\t\tif (typeof(target.setAttribute) !== \"function\") {\n\t\t\treturn false;\n\t\t}\n\t\tfor (p in value) {\n\t\t\tend = value[p];\n\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\tend = end(index, target);\n\t\t\t}\n\t\t\tthis._addTween(target, \"setAttribute\", target.getAttribute(p) + \"\", end + \"\", p, false, p);\n\t\t\tthis._overwriteProps.push(p);\n\t\t}\n\t\treturn true;\n\t}\n\n});\n\nexport { AttrPlugin as default };\n\n\n\n","/*!\n * VERSION: 1.3.9\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\nimport { _gsScope } from \"./TweenLite.js\";\n\n\t\tvar _RAD2DEG = 180 / Math.PI,\n\t\t\t_r1 = [],\n\t\t\t_r2 = [],\n\t\t\t_r3 = [],\n\t\t\t_corProps = {},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\tSegment = function(a, b, c, d) {\n\t\t\t\tif (c === d) { //if c and d match, the final autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tc = d - (d - b) / 1000000;\n\t\t\t\t}\n\t\t\t\tif (a === b) { //if a and b match, the starting autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tb = a + (c - a) / 1000000;\n\t\t\t\t}\n\t\t\t\tthis.a = a;\n\t\t\t\tthis.b = b;\n\t\t\t\tthis.c = c;\n\t\t\t\tthis.d = d;\n\t\t\t\tthis.da = d - a;\n\t\t\t\tthis.ca = c - a;\n\t\t\t\tthis.ba = b - a;\n\t\t\t},\n\t\t\t_correlate = \",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,\",\n\t\t\tcubicToQuadratic = function(a, b, c, d) {\n\t\t\t\tvar q1 = {a:a},\n\t\t\t\t\tq2 = {},\n\t\t\t\t\tq3 = {},\n\t\t\t\t\tq4 = {c:d},\n\t\t\t\t\tmab = (a + b) / 2,\n\t\t\t\t\tmbc = (b + c) / 2,\n\t\t\t\t\tmcd = (c + d) / 2,\n\t\t\t\t\tmabc = (mab + mbc) / 2,\n\t\t\t\t\tmbcd = (mbc + mcd) / 2,\n\t\t\t\t\tm8 = (mbcd - mabc) / 8;\n\t\t\t\tq1.b = mab + (a - mab) / 4;\n\t\t\t\tq2.b = mabc + m8;\n\t\t\t\tq1.c = q2.a = (q1.b + q2.b) / 2;\n\t\t\t\tq2.c = q3.a = (mabc + mbcd) / 2;\n\t\t\t\tq3.b = mbcd - m8;\n\t\t\t\tq4.b = mcd + (d - mcd) / 4;\n\t\t\t\tq3.c = q4.a = (q3.b + q4.b) / 2;\n\t\t\t\treturn [q1, q2, q3, q4];\n\t\t\t},\n\t\t\t_calculateControlPoints = function(a, curviness, quad, basic, correlate) {\n\t\t\t\tvar l = a.length - 1,\n\t\t\t\t\tii = 0,\n\t\t\t\t\tcp1 = a[0].a,\n\t\t\t\t\ti, p1, p2, p3, seg, m1, m2, mm, cp2, qb, r1, r2, tl;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tseg = a[ii];\n\t\t\t\t\tp1 = seg.a;\n\t\t\t\t\tp2 = seg.d;\n\t\t\t\t\tp3 = a[ii+1].d;\n\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tr1 = _r1[i];\n\t\t\t\t\t\tr2 = _r2[i];\n\t\t\t\t\t\ttl = ((r2 + r1) * curviness * 0.25) / (basic ? 0.5 : _r3[i] || 0.5);\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * (basic ? curviness * 0.5 : (r1 !== 0 ? tl / r1 : 0));\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * (basic ? curviness * 0.5 : (r2 !== 0 ? tl / r2 : 0));\n\t\t\t\t\t\tmm = p2 - (m1 + (((m2 - m1) * ((r1 * 3 / (r1 + r2)) + 0.5) / 4) || 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * curviness * 0.5;\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * curviness * 0.5;\n\t\t\t\t\t\tmm = p2 - (m1 + m2) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tm1 += mm;\n\t\t\t\t\tm2 += mm;\n\n\t\t\t\t\tseg.c = cp2 = m1;\n\t\t\t\t\tif (i !== 0) {\n\t\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseg.b = cp1 = seg.a + (seg.c - seg.a) * 0.6; //instead of placing b on a exactly, we move it inline with c so that if the user specifies an ease like Back.easeIn or Elastic.easeIn which goes BEYOND the beginning, it will do so smoothly.\n\t\t\t\t\t}\n\n\t\t\t\t\tseg.da = p2 - p1;\n\t\t\t\t\tseg.ca = cp2 - p1;\n\t\t\t\t\tseg.ba = cp1 - p1;\n\n\t\t\t\t\tif (quad) {\n\t\t\t\t\t\tqb = cubicToQuadratic(p1, cp1, cp2, p2);\n\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t\tii += 4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tii++;\n\t\t\t\t\t}\n\n\t\t\t\t\tcp1 = m2;\n\t\t\t\t}\n\t\t\t\tseg = a[ii];\n\t\t\t\tseg.b = cp1;\n\t\t\t\tseg.c = cp1 + (seg.d - cp1) * 0.4; //instead of placing c on d exactly, we move it inline with b so that if the user specifies an ease like Back.easeOut or Elastic.easeOut which goes BEYOND the end, it will do so smoothly.\n\t\t\t\tseg.da = seg.d - seg.a;\n\t\t\t\tseg.ca = seg.c - seg.a;\n\t\t\t\tseg.ba = cp1 - seg.a;\n\t\t\t\tif (quad) {\n\t\t\t\t\tqb = cubicToQuadratic(seg.a, cp1, seg.c, seg.d);\n\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseAnchors = function(values, p, correlate, prepend) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tl, i, p1, p2, p3, tmp;\n\t\t\t\tif (prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\ti = values.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (typeof( (tmp = values[i][p]) ) === \"string\") if (tmp.charAt(1) === \"=\") {\n\t\t\t\t\t\t\tvalues[i][p] = prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)); //accommodate relative values. Do it inline instead of breaking it out into a function for speed reasons\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tl = values.length - 2;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\ta[0] = new Segment(values[0][p], 0, 0, values[0][p]);\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tp1 = values[i][p];\n\t\t\t\t\tp2 = values[i+1][p];\n\t\t\t\t\ta[i] = new Segment(p1, 0, 0, p2);\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tp3 = values[i+2][p];\n\t\t\t\t\t\t_r1[i] = (_r1[i] || 0) + (p2 - p1) * (p2 - p1);\n\t\t\t\t\t\t_r2[i] = (_r2[i] || 0) + (p3 - p2) * (p3 - p2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[i] = new Segment(values[i][p], 0, 0, values[i+1][p]);\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\tbezierThrough = function(values, curviness, quadratic, basic, correlate, prepend) {\n\t\t\t\tvar obj = {},\n\t\t\t\t\tprops = [],\n\t\t\t\t\tfirst = prepend || values[0],\n\t\t\t\t\ti, p, a, j, r, l, seamless, last;\n\t\t\t\tcorrelate = (typeof(correlate) === \"string\") ? \",\"+correlate+\",\" : _correlate;\n\t\t\t\tif (curviness == null) {\n\t\t\t\t\tcurviness = 1;\n\t\t\t\t}\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\t//check to see if the last and first values are identical (well, within 0.05). If so, make seamless by appending the second element to the very end of the values array and the 2nd-to-last element to the very beginning (we'll remove those segments later)\n\t\t\t\tif (values.length > 1) {\n\t\t\t\t\tlast = values[values.length - 1];\n\t\t\t\t\tseamless = true;\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\tif (Math.abs(first[p] - last[p]) > 0.05) { //build in a tolerance of +/-0.05 to accommodate rounding errors.\n\t\t\t\t\t\t\tseamless = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\tvalues = values.concat(); //duplicate the array to avoid contaminating the original which the user may be reusing for other tweens\n\t\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\t\tvalues.unshift(prepend);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalues.push(values[1]);\n\t\t\t\t\t\tprepend = values[values.length - 3];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_r1.length = _r2.length = _r3.length = 0;\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\t_corProps[p] = (correlate.indexOf(\",\"+p+\",\") !== -1);\n\t\t\t\t\tobj[p] = _parseAnchors(values, p, _corProps[p], prepend);\n\t\t\t\t}\n\t\t\t\ti = _r1.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t_r1[i] = Math.sqrt(_r1[i]);\n\t\t\t\t\t_r2[i] = Math.sqrt(_r2[i]);\n\t\t\t\t}\n\t\t\t\tif (!basic) {\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (_corProps[p]) {\n\t\t\t\t\t\t\ta = obj[props[i]];\n\t\t\t\t\t\t\tl = a.length - 1;\n\t\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\t\tr = (a[j+1].da / _r2[j] + a[j].da / _r1[j]) || 0;\n\t\t\t\t\t\t\t\t_r3[j] = (_r3[j] || 0) + r * r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti = _r3.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_r3[i] = Math.sqrt(_r3[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\tj = quadratic ? 4 : 1;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\ta = obj[p];\n\t\t\t\t\t_calculateControlPoints(a, curviness, quadratic, basic, _corProps[p]); //this method requires that _parseAnchors() and _setSegmentRatios() ran first so that _r1, _r2, and _r3 values are populated for all properties\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\ta.splice(0, j);\n\t\t\t\t\t\ta.splice(a.length - j, j);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_parseBezierData = function(values, type, prepend) {\n\t\t\t\ttype = type || \"soft\";\n\t\t\t\tvar obj = {},\n\t\t\t\t\tinc = (type === \"cubic\") ? 3 : 2,\n\t\t\t\t\tsoft = (type === \"soft\"),\n\t\t\t\t\tprops = [],\n\t\t\t\t\ta, b, c, d, cur, i, j, l, p, cnt, tmp;\n\t\t\t\tif (soft && prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t}\n\t\t\t\tif (values == null || values.length < inc + 1) { throw \"invalid Bezier data\"; }\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\tobj[p] = cur = [];\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tl = values.length;\n\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\ta = (prepend == null) ? values[j][p] : (typeof( (tmp = values[j][p]) ) === \"string\" && tmp.charAt(1) === \"=\") ? prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)) : Number(tmp);\n\t\t\t\t\t\tif (soft) if (j > 1) if (j < l - 1) {\n\t\t\t\t\t\t\tcur[cnt++] = (a + cur[cnt-2]) / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcur[cnt++] = a;\n\t\t\t\t\t}\n\t\t\t\t\tl = cnt - inc + 1;\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tfor (j = 0; j < l; j += inc) {\n\t\t\t\t\t\ta = cur[j];\n\t\t\t\t\t\tb = cur[j+1];\n\t\t\t\t\t\tc = cur[j+2];\n\t\t\t\t\t\td = (inc === 2) ? 0 : cur[j+3];\n\t\t\t\t\t\tcur[cnt++] = tmp = (inc === 3) ? new Segment(a, b, c, d) : new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t\t\t}\n\t\t\t\t\tcur.length = cnt;\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_addCubicLengths = function(a, steps, resolution) {\n\t\t\t\tvar inc = 1 / resolution,\n\t\t\t\t\tj = a.length,\n\t\t\t\t\td, d1, s, da, ca, ba, p, i, inv, bez, index;\n\t\t\t\twhile (--j > -1) {\n\t\t\t\t\tbez = a[j];\n\t\t\t\t\ts = bez.a;\n\t\t\t\t\tda = bez.d - s;\n\t\t\t\t\tca = bez.c - s;\n\t\t\t\t\tba = bez.b - s;\n\t\t\t\t\td = d1 = 0;\n\t\t\t\t\tfor (i = 1; i <= resolution; i++) {\n\t\t\t\t\t\tp = inc * i;\n\t\t\t\t\t\tinv = 1 - p;\n\t\t\t\t\t\td = d1 - (d1 = (p * p * da + 3 * inv * (p * ca + inv * ba)) * p);\n\t\t\t\t\t\tindex = j * resolution + i - 1;\n\t\t\t\t\t\tsteps[index] = (steps[index] || 0) + d * d;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseLengthData = function(obj, resolution) {\n\t\t\t\tresolution = resolution >> 0 || 6;\n\t\t\t\tvar a = [],\n\t\t\t\t\tlengths = [],\n\t\t\t\t\td = 0,\n\t\t\t\t\ttotal = 0,\n\t\t\t\t\tthreshold = resolution - 1,\n\t\t\t\t\tsegments = [],\n\t\t\t\t\tcurLS = [], //current length segments array\n\t\t\t\t\tp, i, l, index;\n\t\t\t\tfor (p in obj) {\n\t\t\t\t\t_addCubicLengths(obj[p], a, resolution);\n\t\t\t\t}\n\t\t\t\tl = a.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\td += Math.sqrt(a[i]);\n\t\t\t\t\tindex = i % resolution;\n\t\t\t\t\tcurLS[index] = d;\n\t\t\t\t\tif (index === threshold) {\n\t\t\t\t\t\ttotal += d;\n\t\t\t\t\t\tindex = (i / resolution) >> 0;\n\t\t\t\t\t\tsegments[index] = curLS;\n\t\t\t\t\t\tlengths[index] = total;\n\t\t\t\t\t\td = 0;\n\t\t\t\t\t\tcurLS = [];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {length:total, lengths:lengths, segments:segments};\n\t\t\t},\n\n\n\n\t\t\tBezierPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\tpropName: \"bezier\",\n\t\t\t\t\tpriority: -1,\n\t\t\t\t\tversion: \"1.3.9\",\n\t\t\t\t\tAPI: 2,\n\t\t\t\t\tglobal:true,\n\n\t\t\t\t\t//gets called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\tinit: function(target, vars, tween) {\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t\tif (vars instanceof Array) {\n\t\t\t\t\t\t\tvars = {values:vars};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._func = {};\n\t\t\t\t\t\tthis._mod = {};\n\t\t\t\t\t\tthis._props = [];\n\t\t\t\t\t\tthis._timeRes = (vars.timeResolution == null) ? 6 : parseInt(vars.timeResolution, 10);\n\t\t\t\t\t\tvar values = vars.values || [],\n\t\t\t\t\t\t\tfirst = {},\n\t\t\t\t\t\t\tsecond = values[0],\n\t\t\t\t\t\t\tautoRotate = vars.autoRotate || tween.vars.orientToBezier,\n\t\t\t\t\t\t\tp, isFunc, i, j, prepend;\n\n\t\t\t\t\t\tthis._autoRotate = autoRotate ? (autoRotate instanceof Array) ? autoRotate : [[\"x\",\"y\",\"rotation\",((autoRotate === true) ? 0 : Number(autoRotate) || 0)]] : null;\n\t\t\t\t\t\tfor (p in second) {\n\t\t\t\t\t\t\tthis._props.push(p);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\n\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\tisFunc = this._func[p] = (typeof(target[p]) === \"function\");\n\t\t\t\t\t\t\tfirst[p] = (!isFunc) ? parseFloat(target[p]) : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]();\n\t\t\t\t\t\t\tif (!prepend) if (first[p] !== values[0][p]) {\n\t\t\t\t\t\t\t\tprepend = first;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._beziers = (vars.type !== \"cubic\" && vars.type !== \"quadratic\" && vars.type !== \"soft\") ? bezierThrough(values, isNaN(vars.curviness) ? 1 : vars.curviness, false, (vars.type === \"thruBasic\"), vars.correlate, prepend) : _parseBezierData(values, vars.type, first);\n\t\t\t\t\t\tthis._segCount = this._beziers[p].length;\n\n\t\t\t\t\t\tif (this._timeRes) {\n\t\t\t\t\t\t\tvar ld = _parseLengthData(this._beziers, this._timeRes);\n\t\t\t\t\t\t\tthis._length = ld.length;\n\t\t\t\t\t\t\tthis._lengths = ld.lengths;\n\t\t\t\t\t\t\tthis._segments = ld.segments;\n\t\t\t\t\t\t\tthis._l1 = this._li = this._s1 = this._si = 0;\n\t\t\t\t\t\t\tthis._l2 = this._lengths[0];\n\t\t\t\t\t\t\tthis._curSeg = this._segments[0];\n\t\t\t\t\t\t\tthis._s2 = this._curSeg[0];\n\t\t\t\t\t\t\tthis._prec = 1 / this._curSeg.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((autoRotate = this._autoRotate)) {\n\t\t\t\t\t\t\tthis._initialRotations = [];\n\t\t\t\t\t\t\tif (!(autoRotate[0] instanceof Array)) {\n\t\t\t\t\t\t\t\tthis._autoRotate = autoRotate = [autoRotate];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ti = autoRotate.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\t\t\t\t\t\t\t\t\tp = autoRotate[i][j];\n\t\t\t\t\t\t\t\t\tthis._func[p] = (typeof(target[p]) === \"function\") ? target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ] : false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = autoRotate[i][2];\n\t\t\t\t\t\t\t\tthis._initialRotations[i] = (this._func[p] ? this._func[p].call(this._target) : this._target[p]) || 0;\n\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._startRatio = tween.vars.runBackwards ? 1 : 0; //we determine the starting ratio when the tween inits which is always 0 unless the tween has runBackwards:true (indicating it's a from() tween) in which case it's 1.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\n\t\t\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\t\t\tset: function(v) {\n\t\t\t\t\t\tvar segments = this._segCount,\n\t\t\t\t\t\t\tfunc = this._func,\n\t\t\t\t\t\t\ttarget = this._target,\n\t\t\t\t\t\t\tnotStart = (v !== this._startRatio),\n\t\t\t\t\t\t\tcurIndex, inv, i, p, b, t, val, l, lengths, curSeg, v1;\n\t\t\t\t\t\tif (!this._timeRes) {\n\t\t\t\t\t\t\tcurIndex = (v < 0) ? 0 : (v >= 1) ? segments - 1 : (segments * v) >> 0;\n\t\t\t\t\t\t\tt = (v - (curIndex * (1 / segments))) * segments;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlengths = this._lengths;\n\t\t\t\t\t\t\tcurSeg = this._curSeg;\n\t\t\t\t\t\t\tv1 = v * this._length;\n\t\t\t\t\t\t\ti = this._li;\n\t\t\t\t\t\t\t//find the appropriate segment (if the currently cached one isn't correct)\n\t\t\t\t\t\t\tif (v1 > this._l2 && i < segments - 1) {\n\t\t\t\t\t\t\t\tl = segments - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._l2 = lengths[++i]) <= v1) {\t}\n\t\t\t\t\t\t\t\tthis._l1 = lengths[i-1];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[(this._s1 = this._si = 0)];\n\t\t\t\t\t\t\t} else if (v1 < this._l1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._l1 = lengths[--i]) >= v1) { }\n\t\t\t\t\t\t\t\tif (i === 0 && v1 < this._l1) {\n\t\t\t\t\t\t\t\t\tthis._l1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._l2 = lengths[i];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[(this._si = curSeg.length - 1) - 1] || 0;\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[this._si];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurIndex = i;\n\t\t\t\t\t\t\t//now find the appropriate sub-segment (we split it into the number of pieces that was defined by \"precision\" and measured each one)\n\t\t\t\t\t\t\tv1 -= this._l1;\n\t\t\t\t\t\t\ti = this._si;\n\t\t\t\t\t\t\tif (v1 > this._s2 && i < curSeg.length - 1) {\n\t\t\t\t\t\t\t\tl = curSeg.length - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._s2 = curSeg[++i]) <= v1) {\t}\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[i-1];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t} else if (v1 < this._s1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._s1 = curSeg[--i]) >= v1) {\t}\n\t\t\t\t\t\t\t\tif (i === 0 && v1 < this._s1) {\n\t\t\t\t\t\t\t\t\tthis._s1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[i];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tt = (v === 1) ? 1 : ((i + (v1 - this._s1) / (this._s2 - this._s1)) * this._prec) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinv = 1 - t;\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\t\t\t\t\t\t\tb = this._beziers[p][curIndex];\n\t\t\t\t\t\t\tval = (t * t * b.da + 3 * inv * (t * b.ca + inv * b.ba)) * t + b.a;\n\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\tval = this._mod[p](val, target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._autoRotate) {\n\t\t\t\t\t\t\tvar ar = this._autoRotate,\n\t\t\t\t\t\t\t\tb2, x1, y1, x2, y2, add, conv;\n\t\t\t\t\t\t\ti = ar.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = ar[i][2];\n\t\t\t\t\t\t\t\tadd = ar[i][3] || 0;\n\t\t\t\t\t\t\t\tconv = (ar[i][4] === true) ? 1 : _RAD2DEG;\n\t\t\t\t\t\t\t\tb = this._beziers[ar[i][0]];\n\t\t\t\t\t\t\t\tb2 = this._beziers[ar[i][1]];\n\n\t\t\t\t\t\t\t\tif (b && b2) { //in case one of the properties got overwritten.\n\t\t\t\t\t\t\t\t\tb = b[curIndex];\n\t\t\t\t\t\t\t\t\tb2 = b2[curIndex];\n\n\t\t\t\t\t\t\t\t\tx1 = b.a + (b.b - b.a) * t;\n\t\t\t\t\t\t\t\t\tx2 = b.b + (b.c - b.b) * t;\n\t\t\t\t\t\t\t\t\tx1 += (x2 - x1) * t;\n\t\t\t\t\t\t\t\t\tx2 += ((b.c + (b.d - b.c) * t) - x2) * t;\n\n\t\t\t\t\t\t\t\t\ty1 = b2.a + (b2.b - b2.a) * t;\n\t\t\t\t\t\t\t\t\ty2 = b2.b + (b2.c - b2.b) * t;\n\t\t\t\t\t\t\t\t\ty1 += (y2 - y1) * t;\n\t\t\t\t\t\t\t\t\ty2 += ((b2.c + (b2.d - b2.c) * t) - y2) * t;\n\n\t\t\t\t\t\t\t\t\tval = notStart ? Math.atan2(y2 - y1, x2 - x1) * conv + add : this._initialRotations[i];\n\n\t\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target); //for modProps\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}),\n\t\t\tp = BezierPlugin.prototype;\n\n\n\t\tBezierPlugin.bezierThrough = bezierThrough;\n\t\tBezierPlugin.cubicToQuadratic = cubicToQuadratic;\n\t\tBezierPlugin._autoCSS = true; //indicates that this plugin can be inserted into the \"css\" object using the autoCSS feature of TweenLite\n\t\tBezierPlugin.quadraticToCubic = function(a, b, c) {\n\t\t\treturn new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t};\n\n\t\tBezierPlugin._cssRegister = function() {\n\t\t\tvar CSSPlugin = _globals.CSSPlugin;\n\t\t\tif (!CSSPlugin) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar _internals = CSSPlugin._internals,\n\t\t\t\t_parseToProxy = _internals._parseToProxy,\n\t\t\t\t_setPluginRatio = _internals._setPluginRatio,\n\t\t\t\tCSSPropTween = _internals.CSSPropTween;\n\t\t\t_internals._registerComplexSpecialProp(\"bezier\", {parser:function(t, e, prop, cssp, pt, plugin) {\n\t\t\t\tif (e instanceof Array) {\n\t\t\t\t\te = {values:e};\n\t\t\t\t}\n\t\t\t\tplugin = new BezierPlugin();\n\t\t\t\tvar values = e.values,\n\t\t\t\t\tl = values.length - 1,\n\t\t\t\t\tpluginValues = [],\n\t\t\t\t\tv = {},\n\t\t\t\t\ti, p, data;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\tdata = _parseToProxy(t, values[i], cssp, pt, plugin, (l !== i));\n\t\t\t\t\tpluginValues[i] = data.end;\n\t\t\t\t}\n\t\t\t\tfor (p in e) {\n\t\t\t\t\tv[p] = e[p]; //duplicate the vars object because we need to alter some things which would cause problems if the user plans to reuse the same vars object for another tween.\n\t\t\t\t}\n\t\t\t\tv.values = pluginValues;\n\t\t\t\tpt = new CSSPropTween(t, \"bezier\", 0, 0, data.pt, 2);\n\t\t\t\tpt.data = data;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setPluginRatio;\n\t\t\t\tif (v.autoRotate === 0) {\n\t\t\t\t\tv.autoRotate = true;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate && !(v.autoRotate instanceof Array)) {\n\t\t\t\t\ti = (v.autoRotate === true) ? 0 : Number(v.autoRotate);\n\t\t\t\t\tv.autoRotate = (data.end.left != null) ? [[\"left\",\"top\",\"rotation\",i,false]] : (data.end.x != null) ? [[\"x\",\"y\",\"rotation\",i,false]] : false;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate) {\n\t\t\t\t\tif (!cssp._transform) {\n\t\t\t\t\t\tcssp._enableTransforms(false);\n\t\t\t\t\t}\n\t\t\t\t\tdata.autoRotate = cssp._target._gsTransform;\n\t\t\t\t\tdata.proxy.rotation = data.autoRotate.rotation || 0;\n\t\t\t\t\tcssp._overwriteProps.push(\"rotation\");\n\t\t\t\t}\n\t\t\t\tplugin._onInitTween(data.proxy, v, cssp._tween);\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar op = this._overwriteProps,\n\t\t\t\ti = op.length,\n\t\t\t\tval;\n\t\t\twhile (--i > -1) {\n\t\t\t\tval = lookup[op[i]];\n\t\t\t\tif (val && typeof(val) === \"function\") {\n\t\t\t\t\tthis._mod[op[i]] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._props,\n\t\t\t\tp, i;\n\t\t\tfor (p in this._beziers) {\n\t\t\t\tif (p in lookup) {\n\t\t\t\t\tdelete this._beziers[p];\n\t\t\t\t\tdelete this._func[p];\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i] === p) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ta = this._autoRotate;\n\t\t\tif (a) {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i][2]]) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._super._kill.call(this, lookup);\n\t\t};\n\nexport { BezierPlugin, BezierPlugin as default };","/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, TweenPlugin } from \"./TweenLite.js\";\n\n\t_gsScope._gsDefine(\"plugins.CSSPlugin\", [\"plugins.TweenPlugin\",\"TweenLite\"], function() {\n\n\t\t/** @constructor **/\n\t\tvar CSSPlugin = function() {\n\t\t\t\tTweenPlugin.call(this, \"css\");\n\t\t\t\tthis._overwriteProps.length = 0;\n\t\t\t\tthis.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.\n\t\t\t_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance\n\t\t\t_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter\n\t\t\t_overwriteProps, //alias to the currently instantiating CSSPlugin's _overwriteProps array. We use this closure in order to avoid having to pass a reference around from method to method and aid in minification.\n\t\t\t_specialProps = {},\n\t\t\tp = CSSPlugin.prototype = new TweenPlugin(\"css\");\n\n\t\tp.constructor = CSSPlugin;\n\t\tCSSPlugin.version = \"2.1.3\";\n\t\tCSSPlugin.API = 2;\n\t\tCSSPlugin.defaultTransformPerspective = 0;\n\t\tCSSPlugin.defaultSkewType = \"compensated\";\n\t\tCSSPlugin.defaultSmoothOrigin = true;\n\t\tp = \"px\"; //we'll reuse the \"p\" variable to keep file size down\n\t\tCSSPlugin.suffixMap = {top:p, right:p, bottom:p, left:p, width:p, height:p, fontSize:p, padding:p, margin:p, perspective:p, lineHeight:\"\"};\n\n\n\t\tvar _numExp = /(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,\n\t\t\t_relNumExp = /(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,\n\t\t\t_valuesExp = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \"1px 5px 20px rgb(255,102,51)\"\n\t\t\t_valuesExpWithCommas = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b),?/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \"1px 5px 20px rgb(255,102,51)\"\n\t\t\t_NaNExp = /(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=\n\t\t\t_suffixExp = /(?:\\d|\\-|\\+|=|#|\\.)*/g,\n\t\t\t_opacityExp = /opacity *= *([^)]*)/i,\n\t\t\t_opacityValExp = /opacity:([^;]*)/i,\n\t\t\t_alphaFilterExp = /alpha\\(opacity *=.+?\\)/i,\n\t\t\t_rgbhslExp = /^(rgb|hsl)/,\n\t\t\t_capsExp = /([A-Z])/g,\n\t\t\t_camelExp = /-([a-z])/gi,\n\t\t\t_urlExp = /(^(?:url\\(\\\"|url\\())|(?:(\\\"\\))$|\\)$)/gi, //for pulling out urls from url(...) or url(\"...\") strings (some browsers wrap urls in quotes, some don't when reporting things like backgroundImage)\n\t\t\t_camelFunc = function(s, g) { return g.toUpperCase(); },\n\t\t\t_horizExp = /(?:Left|Right|Width)/i,\n\t\t\t_ieGetMatrixExp = /(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,\n\t\t\t_ieSetMatrixExp = /progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,\n\t\t\t_commasOutsideParenExp = /,(?=[^\\)]*(?:\\(|$))/gi, //finds any commas that are not within parenthesis\n\t\t\t_complexExp = /[\\s,\\(]/i, //for testing a string to find if it has a space, comma, or open parenthesis (clues that it's a complex value)\n\t\t\t_DEG2RAD = Math.PI / 180,\n\t\t\t_RAD2DEG = 180 / Math.PI,\n\t\t\t_forcePT = {},\n\t\t\t_dummyElement = {style:{}},\n\t\t\t_doc = _gsScope.document || {createElement: function() {return _dummyElement;}},\n\t\t\t_createElement = function(type, ns) {\n\t\t\t\tvar e = _doc.createElementNS ? _doc.createElementNS(ns || \"http://www.w3.org/1999/xhtml\", type) : _doc.createElement(type);\n\t\t\t\treturn e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://greensock.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\n\t\t\t},\n\t\t\t_tempDiv = _createElement(\"div\"),\n\t\t\t_tempImg = _createElement(\"img\"),\n\t\t\t_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins\n\t\t\t_agent = (_gsScope.navigator || {}).userAgent || \"\",\n\t\t\t_autoRound,\n\t\t\t_reqSafariFix, //we won't apply the Safari transform fix until we actually come across a tween that affects a transform property (to maintain best performance).\n\n\t\t\t_isSafari,\n\t\t\t_isFirefox, //Firefox has a bug that causes 3D transformed elements to randomly disappear unless a repaint is forced after each update on each element.\n\t\t\t_isSafariLT6, //Safari (and Android 4 which uses a flavor of Safari) has a bug that prevents changes to \"top\" and \"left\" properties from rendering properly if changed on the same frame as a transform UNLESS we set the element's WebkitBackfaceVisibility to hidden (weird, I know). Doing this for Android 3 and earlier seems to actually cause other problems, though (fun!)\n\t\t\t_ieVers,\n\t\t\t_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.\n\t\t\t\tvar i = _agent.indexOf(\"Android\"),\n\t\t\t\t\ta = _createElement(\"a\");\n\t\t\t\t_isSafari = (_agent.indexOf(\"Safari\") !== -1 && _agent.indexOf(\"Chrome\") === -1 && (i === -1 || parseFloat(_agent.substr(i+8, 2)) > 3));\n\t\t\t\t_isSafariLT6 = (_isSafari && (parseFloat(_agent.substr(_agent.indexOf(\"Version/\")+8, 2)) < 6));\n\t\t\t\t_isFirefox = (_agent.indexOf(\"Firefox\") !== -1);\n\t\t\t\tif ((/MSIE ([0-9]{1,}[\\.0-9]{0,})/).exec(_agent) || (/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/).exec(_agent)) {\n\t\t\t\t\t_ieVers = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tif (!a) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\ta.style.cssText = \"top:1px;opacity:.55;\";\n\t\t\t\treturn /^0.55/.test(a.style.opacity);\n\t\t\t}()),\n\t\t\t_getIEOpacity = function(v) {\n\t\t\t\treturn (_opacityExp.test( ((typeof(v) === \"string\") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || \"\") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);\n\t\t\t},\n\t\t\t_log = function(s) {//for logging messages, but in a way that won't throw errors in old versions of IE.\n\t\t\t\tif (_gsScope.console) {\n\t\t\t\t\tconsole.log(s);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_target, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\t\t_index, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\n\t\t\t_prefixCSS = \"\", //the non-camelCase vendor prefix like \"-o-\", \"-moz-\", \"-ms-\", or \"-webkit-\"\n\t\t\t_prefix = \"\", //camelCase vendor prefix like \"O\", \"ms\", \"Webkit\", or \"Moz\".\n\n\t\t\t// @private feed in a camelCase property name like \"transform\" and it will check to see if it is valid as-is or if it needs a vendor prefix. It returns the corrected camelCase property name (i.e. \"WebkitTransform\" or \"MozTransform\" or \"transform\" or null if no such property is found, like if the browser is IE8 or before, \"transform\" won't be found at all)\n\t\t\t_checkPropPrefix = function(p, e) {\n\t\t\t\te = e || _tempDiv;\n\t\t\t\tvar s = e.style,\n\t\t\t\t\ta, i;\n\t\t\t\tif (s[p] !== undefined) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\t\t\t\ta = [\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"];\n\t\t\t\ti = 5;\n\t\t\t\twhile (--i > -1 && s[a[i]+p] === undefined) { }\n\t\t\t\tif (i >= 0) {\n\t\t\t\t\t_prefix = (i === 3) ? \"ms\" : a[i];\n\t\t\t\t\t_prefixCSS = \"-\" + _prefix.toLowerCase() + \"-\";\n\t\t\t\t\treturn _prefix + p;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\n\t\t\t_computedStyleScope = (typeof(window) !== \"undefined\" ? window : _doc.defaultView || {getComputedStyle:function() {}}),\n\t\t\t_getComputedStyle = function(e) {\n\t\t\t\treturn _computedStyleScope.getComputedStyle(e); //to avoid errors in Microsoft Edge, we need to call getComputedStyle() from a specific scope, typically window.\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Returns the css style for a particular property of an element. For example, to get whatever the current \"left\" css value for an element with an ID of \"myElement\", you could do:\n\t\t\t * var currentLeft = CSSPlugin.getStyle( document.getElementById(\"myElement\"), \"left\");\n\t\t\t *\n\t\t\t * @param {!Object} t Target element whose style property you want to query\n\t\t\t * @param {!string} p Property name (like \"left\" or \"top\" or \"marginTop\", etc.)\n\t\t\t * @param {Object=} cs Computed style object. This just provides a way to speed processing if you're going to get several properties on the same element in quick succession - you can reuse the result of the getComputedStyle() call.\n\t\t\t * @param {boolean=} calc If true, the value will not be read directly from the element's \"style\" property (if it exists there), but instead the getComputedStyle() result will be used. This can be useful when you want to ensure that the browser itself is interpreting the value.\n\t\t\t * @param {string=} dflt Default value that should be returned in the place of null, \"none\", \"auto\" or \"auto auto\".\n\t\t\t * @return {?string} The current property value\n\t\t\t */\n\t\t\t_getStyle = CSSPlugin.getStyle = function(t, p, cs, calc, dflt) {\n\t\t\t\tvar rv;\n\t\t\t\tif (!_supportsOpacity) if (p === \"opacity\") { //several versions of IE don't use the standard \"opacity\" property - they use things like filter:alpha(opacity=50), so we parse that here.\n\t\t\t\t\treturn _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\tif (!calc && t.style[p]) {\n\t\t\t\t\trv = t.style[p];\n\t\t\t\t} else if ((cs = cs || _getComputedStyle(t))) {\n\t\t\t\t\trv = cs[p] || cs.getPropertyValue(p) || cs.getPropertyValue(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t} else if (t.currentStyle) {\n\t\t\t\t\trv = t.currentStyle[p];\n\t\t\t\t}\n\t\t\t\treturn (dflt != null && (!rv || rv === \"none\" || rv === \"auto\" || rv === \"auto auto\")) ? dflt : rv;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Pass the target element, the property name, the numeric value, and the suffix (like \"%\", \"em\", \"px\", etc.) and it will spit back the equivalent pixel number.\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (like \"left\", \"top\", \"marginLeft\", etc.)\n\t\t\t * @param {!number} v Value\n\t\t\t * @param {string=} sfx Suffix (like \"px\" or \"%\" or \"em\")\n\t\t\t * @param {boolean=} recurse If true, the call is a recursive one. In some browsers (like IE7/8), occasionally the value isn't accurately reported initially, but if we run the function again it will take effect.\n\t\t\t * @return {number} value in pixels\n\t\t\t */\n\t\t\t_convertToPixels = _internals.convertToPixels = function(t, p, v, sfx, recurse) {\n\t\t\t\tif (sfx === \"px\" || (!sfx && p !== \"lineHeight\")) { return v; }\n\t\t\t\tif (sfx === \"auto\" || !v) { return 0; }\n\t\t\t\tvar horiz = _horizExp.test(p),\n\t\t\t\t\tnode = t,\n\t\t\t\t\tstyle = _tempDiv.style,\n\t\t\t\t\tneg = (v < 0),\n\t\t\t\t\tprecise = (v === 1),\n\t\t\t\t\tpix, cache, time;\n\t\t\t\tif (neg) {\n\t\t\t\t\tv = -v;\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tv *= 100;\n\t\t\t\t}\n\t\t\t\tif (p === \"lineHeight\" && !sfx) { //special case of when a simple lineHeight (without a unit) is used. Set it to the value, read back the computed value, and then revert.\n\t\t\t\t\tcache = _getComputedStyle(t).lineHeight;\n\t\t\t\t\tt.style.lineHeight = v;\n\t\t\t\t\tpix = parseFloat(_getComputedStyle(t).lineHeight);\n\t\t\t\t\tt.style.lineHeight = cache;\n\t\t\t\t} else if (sfx === \"%\" && p.indexOf(\"border\") !== -1) {\n\t\t\t\t\tpix = (v / 100) * (horiz ? t.clientWidth : t.clientHeight);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.cssText = \"border:0 solid red;position:\" + _getStyle(t, \"position\") + \";line-height:0;\";\n\t\t\t\t\tif (sfx === \"%\" || !node.appendChild || sfx.charAt(0) === \"v\" || sfx === \"rem\") {\n\t\t\t\t\t\tnode = t.parentNode || _doc.body;\n\t\t\t\t\t\tif (_getStyle(node, \"display\").indexOf(\"flex\") !== -1) { //Edge and IE11 have a bug that causes offsetWidth to report as 0 if the container has display:flex and the child is position:relative. Switching to position: absolute solves it.\n\t\t\t\t\t\t\tstyle.position = \"absolute\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcache = node._gsCache;\n\t\t\t\t\t\ttime = TweenLite.ticker.frame;\n\t\t\t\t\t\tif (cache && horiz && cache.time === time) { //performance optimization: we record the width of elements along with the ticker frame so that we can quickly get it again on the same tick (seems relatively safe to assume it wouldn't change on the same tick)\n\t\t\t\t\t\t\treturn cache.width * v / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[(horiz ? \"width\" : \"height\")] = v + sfx;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[(horiz ? \"borderLeftWidth\" : \"borderTopWidth\")] = v + sfx;\n\t\t\t\t\t}\n\t\t\t\t\tnode.appendChild(_tempDiv);\n\t\t\t\t\tpix = parseFloat(_tempDiv[(horiz ? \"offsetWidth\" : \"offsetHeight\")]);\n\t\t\t\t\tnode.removeChild(_tempDiv);\n\t\t\t\t\tif (horiz && sfx === \"%\" && CSSPlugin.cacheWidths !== false) {\n\t\t\t\t\t\tcache = node._gsCache = node._gsCache || {};\n\t\t\t\t\t\tcache.time = time;\n\t\t\t\t\t\tcache.width = pix / v * 100;\n\t\t\t\t\t}\n\t\t\t\t\tif (pix === 0 && !recurse) {\n\t\t\t\t\t\tpix = _convertToPixels(t, p, v, sfx, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tpix /= 100;\n\t\t\t\t}\n\t\t\t\treturn neg ? -pix : pix;\n\t\t\t},\n\t\t\t_calculateOffset = _internals.calculateOffset = function(t, p, cs) { //for figuring out \"top\" or \"left\" in px when it's \"auto\". We need to factor in margin with the offsetLeft/offsetTop\n\t\t\t\tif (_getStyle(t, \"position\", cs) !== \"absolute\") { return 0; }\n\t\t\t\tvar dim = ((p === \"left\") ? \"Left\" : \"Top\"),\n\t\t\t\t\tv = _getStyle(t, \"margin\" + dim, cs);\n\t\t\t\treturn t[\"offset\" + dim] - (_convertToPixels(t, p, parseFloat(v), v.replace(_suffixExp, \"\")) || 0);\n\t\t\t},\n\n\t\t\t// @private returns at object containing ALL of the style properties in camelCase and their associated values.\n\t\t\t_getAllStyles = function(t, cs) {\n\t\t\t\tvar s = {},\n\t\t\t\t\ti, tr, p;\n\t\t\t\tif ((cs = cs || _getComputedStyle(t, null))) {\n\t\t\t\t\tif ((i = cs.length)) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = cs[i];\n\t\t\t\t\t\t\tif (p.indexOf(\"-transform\") === -1 || _transformPropCSS === p) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[p.replace(_camelExp, _camelFunc)] = cs.getPropertyValue(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { //some browsers behave differently - cs.length is always 0, so we must do a for...in loop.\n\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\tif (i.indexOf(\"Transform\") === -1 || _transformProp === i) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\"transform\" and \"WebkitTransform\"), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[i] = cs[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ((cs = t.currentStyle || t.style)) {\n\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\tif (typeof(i) === \"string\" && s[i] === undefined) {\n\t\t\t\t\t\t\ts[i.replace(_camelExp, _camelFunc)] = cs[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!_supportsOpacity) {\n\t\t\t\t\ts.opacity = _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\ttr = _getTransform(t, cs, false);\n\t\t\t\ts.rotation = tr.rotation;\n\t\t\t\ts.skewX = tr.skewX;\n\t\t\t\ts.scaleX = tr.scaleX;\n\t\t\t\ts.scaleY = tr.scaleY;\n\t\t\t\ts.x = tr.x;\n\t\t\t\ts.y = tr.y;\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\ts.z = tr.z;\n\t\t\t\t\ts.rotationX = tr.rotationX;\n\t\t\t\t\ts.rotationY = tr.rotationY;\n\t\t\t\t\ts.scaleZ = tr.scaleZ;\n\t\t\t\t}\n\t\t\t\tif (s.filters) {\n\t\t\t\t\tdelete s.filters;\n\t\t\t\t}\n\t\t\t\treturn s;\n\t\t\t},\n\n\t\t\t// @private analyzes two style objects (as returned by _getAllStyles()) and only looks for differences between them that contain tweenable values (like a number or color). It returns an object with a \"difs\" property which refers to an object containing only those isolated properties and values for tweening, and a \"firstMPT\" property which refers to the first MiniPropTween instance in a linked list that recorded all the starting values of the different properties so that we can revert to them at the end or beginning of the tween - we don't want the cascading to get messed up. The forceLookup parameter is an optional generic object with properties that should be forced into the results - this is necessary for className tweens that are overwriting others because imagine a scenario where a rollover/rollout adds/removes a class and the user swipes the mouse over the target SUPER fast, thus nothing actually changed yet and the subsequent comparison of the properties would indicate they match (especially when px rounding is taken into consideration), thus no tweening is necessary even though it SHOULD tween and remove those properties after the tween (otherwise the inline styles will contaminate things). See the className SpecialProp code for details.\n\t\t\t_cssDif = function(t, s1, s2, vars, forceLookup) {\n\t\t\t\tvar difs = {},\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tval, p, mpt;\n\t\t\t\tfor (p in s2) {\n\t\t\t\t\tif (p !== \"cssText\") if (p !== \"length\") if (isNaN(p)) if (s1[p] !== (val = s2[p]) || (forceLookup && forceLookup[p])) if (p.indexOf(\"Origin\") === -1) if (typeof(val) === \"number\" || typeof(val) === \"string\") {\n\t\t\t\t\t\tdifs[p] = (val === \"auto\" && (p === \"left\" || p === \"top\")) ? _calculateOffset(t, p) : ((val === \"\" || val === \"auto\" || val === \"none\") && typeof(s1[p]) === \"string\" && s1[p].replace(_NaNExp, \"\") !== \"\") ? 0 : val; //if the ending value is defaulting (\"\" or \"auto\"), we check the starting value and if it can be parsed into a number (a string which could have a suffix too, like 700px), then we swap in 0 for \"\" or \"auto\" so that things actually tween.\n\t\t\t\t\t\tif (style[p] !== undefined) { //for className tweens, we must remember which properties already existed inline - the ones that didn't should be removed when the tween isn't in progress because they were only introduced to facilitate the transition between classes.\n\t\t\t\t\t\t\tmpt = new MiniPropTween(style, p, style[p], mpt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (vars) {\n\t\t\t\t\tfor (p in vars) { //copy properties (except className)\n\t\t\t\t\t\tif (p !== \"className\") {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {difs:difs, firstMPT:mpt};\n\t\t\t},\n\t\t\t_dimensions = {width:[\"Left\",\"Right\"], height:[\"Top\",\"Bottom\"]},\n\t\t\t_margins = [\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],\n\n\t\t\t/**\n\t\t\t * @private Gets the width or height of an element\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (\"width\" or \"height\")\n\t\t\t * @param {Object=} cs Computed style object (if one exists). Just a speed optimization.\n\t\t\t * @return {number} Dimension (in pixels)\n\t\t\t */\n\t\t\t_getDimension = function(t, p, cs) {\n\t\t\t\tif ((t.nodeName + \"\").toLowerCase() === \"svg\") { //Chrome no longer supports offsetWidth/offsetHeight on SVG elements.\n\t\t\t\t\treturn (cs || _getComputedStyle(t))[p] || 0;\n\t\t\t\t} else if (t.getCTM && _isSVG(t)) {\n\t\t\t\t\treturn t.getBBox()[p] || 0;\n\t\t\t\t}\n\t\t\t\tvar v = parseFloat((p === \"width\") ? t.offsetWidth : t.offsetHeight),\n\t\t\t\t\ta = _dimensions[p],\n\t\t\t\t\ti = a.length;\n\t\t\t\tcs = cs || _getComputedStyle(t, null);\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \"padding\" + a[i], cs, true) ) || 0;\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \"border\" + a[i] + \"Width\", cs, true) ) || 0;\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t},\n\n\t\t\t// @private Parses position-related complex strings like \"top left\" or \"50px 10px\" or \"70% 20%\", etc. which are used for things like transformOrigin or backgroundPosition. Optionally decorates a supplied object (recObj) with the following properties: \"ox\" (offsetX), \"oy\" (offsetY), \"oxp\" (if true, \"ox\" is a percentage not a pixel value), and \"oxy\" (if true, \"oy\" is a percentage not a pixel value)\n\t\t\t_parsePosition = function(v, recObj) {\n\t\t\t\tif (v === \"contain\" || v === \"auto\" || v === \"auto auto\") { //note: Firefox uses \"auto auto\" as default whereas Chrome uses \"auto\".\n\t\t\t\t\treturn v + \" \";\n\t\t\t\t}\n\t\t\t\tif (v == null || v === \"\") {\n\t\t\t\t\tv = \"0 0\";\n\t\t\t\t}\n\t\t\t\tvar a = v.split(\" \"),\n\t\t\t\t\tx = (v.indexOf(\"left\") !== -1) ? \"0%\" : (v.indexOf(\"right\") !== -1) ? \"100%\" : a[0],\n\t\t\t\t\ty = (v.indexOf(\"top\") !== -1) ? \"0%\" : (v.indexOf(\"bottom\") !== -1) ? \"100%\" : a[1],\n\t\t\t\t\ti;\n\t\t\t\tif (a.length > 3 && !recObj) { //multiple positions\n\t\t\t\t\ta = v.split(\", \").join(\",\").split(\",\");\n\t\t\t\t\tv = [];\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\tv.push(_parsePosition(a[i]));\n\t\t\t\t\t}\n\t\t\t\t\treturn v.join(\",\");\n\t\t\t\t}\n\t\t\t\tif (y == null) {\n\t\t\t\t\ty = (x === \"center\") ? \"50%\" : \"0\";\n\t\t\t\t} else if (y === \"center\") {\n\t\t\t\t\ty = \"50%\";\n\t\t\t\t}\n\t\t\t\tif (x === \"center\" || (isNaN(parseFloat(x)) && (x + \"\").indexOf(\"=\") === -1)) { //remember, the user could flip-flop the values and say \"bottom center\" or \"center bottom\", etc. \"center\" is ambiguous because it could be used to describe horizontal or vertical, hence the isNaN(). If there's an \"=\" sign in the value, it's relative.\n\t\t\t\t\tx = \"50%\";\n\t\t\t\t}\n\t\t\t\tv = x + \" \" + y + ((a.length > 2) ? \" \" + a[2] : \"\");\n\t\t\t\tif (recObj) {\n\t\t\t\t\trecObj.oxp = (x.indexOf(\"%\") !== -1);\n\t\t\t\t\trecObj.oyp = (y.indexOf(\"%\") !== -1);\n\t\t\t\t\trecObj.oxr = (x.charAt(1) === \"=\");\n\t\t\t\t\trecObj.oyr = (y.charAt(1) === \"=\");\n\t\t\t\t\trecObj.ox = parseFloat(x.replace(_NaNExp, \"\"));\n\t\t\t\t\trecObj.oy = parseFloat(y.replace(_NaNExp, \"\"));\n\t\t\t\t\trecObj.v = v;\n\t\t\t\t}\n\t\t\t\treturn recObj || v;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes an ending value (typically a string, but can be a number) and a starting value and returns the change between the two, looking for relative value indicators like += and -= and it also ignores suffixes (but make sure the ending value starts with a number or +=/-= and that the starting value is a NUMBER!)\n\t\t\t * @param {(number|string)} e End value which is typically a string, but could be a number\n\t\t\t * @param {(number|string)} b Beginning value which is typically a string but could be a number\n\t\t\t * @return {number} Amount of change between the beginning and ending values (relative values that have a \"+=\" or \"-=\" are recognized)\n\t\t\t */\n\t\t\t_parseChange = function(e, b) {\n\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\treturn (typeof(e) === \"string\" && e.charAt(1) === \"=\") ? parseInt(e.charAt(0) + \"1\", 10) * parseFloat(e.substr(2)) : (parseFloat(e) - parseFloat(b)) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes a value and a default number, checks if the value is relative, null, or numeric and spits back a normalized number accordingly. Primarily used in the _parseTransform() function.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t * @return {number} Parsed value\n\t\t\t */\n\t\t\t_parseVal = function(v, d) {\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\tvar isRelative = (typeof(v) === \"string\" && v.charAt(1) === \"=\");\n\t\t\t\tif (typeof(v) === \"string\" && v.charAt(v.length - 2) === \"v\") { //convert vw and vh into px-equivalents.\n\t\t\t\t\tv = (isRelative ? v.substr(0, 2) : 0) + (window[\"inner\" + ((v.substr(-2) === \"vh\") ? \"Height\" : \"Width\")] * (parseFloat(isRelative ? v.substr(2) : v) / 100));\n\t\t\t\t}\n\t\t\t\treturn (v == null) ? d : isRelative ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(v.substr(2)) + d : parseFloat(v) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Translates strings like \"40deg\" or \"40\" or 40rad\" or \"+=40deg\" or \"270_short\" or \"-90_cw\" or \"+=45_ccw\" to a numeric radian angle. Of course a starting/default value must be fed in too so that relative values can be calculated properly.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \"+=\" or \"-=\" is found in the first parameter)\n\t\t\t * @param {string=} p property name for directionalEnd (optional - only used when the parsed value is directional (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation). Property name would be \"rotation\", \"rotationX\", or \"rotationY\"\n\t\t\t * @param {Object=} directionalEnd An object that will store the raw end values for directional angles (\"_short\", \"_cw\", or \"_ccw\" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation.\n\t\t\t * @return {number} parsed angle in radians\n\t\t\t */\n\t\t\t_parseAngle = function(v, d, p, directionalEnd) {\n\t\t\t\tvar min = 0.000001,\n\t\t\t\t\tcap, split, dif, result, isRelative;\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\tif (v == null) {\n\t\t\t\t\tresult = d;\n\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\tresult = v;\n\t\t\t\t} else {\n\t\t\t\t\tcap = 360;\n\t\t\t\t\tsplit = v.split(\"_\");\n\t\t\t\t\tisRelative = (v.charAt(1) === \"=\");\n\t\t\t\t\tdif = (isRelative ? parseInt(v.charAt(0) + \"1\", 10) * parseFloat(split[0].substr(2)) : parseFloat(split[0])) * ((v.indexOf(\"rad\") === -1) ? 1 : _RAD2DEG) - (isRelative ? 0 : d);\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tif (directionalEnd) {\n\t\t\t\t\t\t\tdirectionalEnd[p] = d + dif;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresult = d + dif;\n\t\t\t\t}\n\t\t\t\tif (result < min && result > -min) {\n\t\t\t\t\tresult = 0;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t_colorLookup = {aqua:[0,255,255],\n\t\t\t\tlime:[0,255,0],\n\t\t\t\tsilver:[192,192,192],\n\t\t\t\tblack:[0,0,0],\n\t\t\t\tmaroon:[128,0,0],\n\t\t\t\tteal:[0,128,128],\n\t\t\t\tblue:[0,0,255],\n\t\t\t\tnavy:[0,0,128],\n\t\t\t\twhite:[255,255,255],\n\t\t\t\tfuchsia:[255,0,255],\n\t\t\t\tolive:[128,128,0],\n\t\t\t\tyellow:[255,255,0],\n\t\t\t\torange:[255,165,0],\n\t\t\t\tgray:[128,128,128],\n\t\t\t\tpurple:[128,0,128],\n\t\t\t\tgreen:[0,128,0],\n\t\t\t\tred:[255,0,0],\n\t\t\t\tpink:[255,192,203],\n\t\t\t\tcyan:[0,255,255],\n\t\t\t\ttransparent:[255,255,255,0]},\n\n\t\t\t_hue = function(h, m1, m2) {\n\t\t\t\th = (h < 0) ? h + 1 : (h > 1) ? h - 1 : h;\n\t\t\t\treturn ((((h * 6 < 1) ? m1 + (m2 - m1) * h * 6 : (h < 0.5) ? m2 : (h * 3 < 2) ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * 255) + 0.5) | 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Parses a color (like #9F0, #FF9900, rgb(255,51,153) or hsl(108, 50%, 10%)) into an array with 3 elements for red, green, and blue or if toHSL parameter is true, it will populate the array with hue, saturation, and lightness values. If a relative value is found in an hsl() or hsla() string, it will preserve those relative prefixes and all the values in the array will be strings instead of numbers (in all other cases it will be populated with numbers).\n\t\t\t * @param {(string|number)} v The value the should be parsed which could be a string like #9F0 or rgb(255,102,51) or rgba(255,0,0,0.5) or it could be a number like 0xFF00CC or even a named color like red, blue, purple, etc.\n\t\t\t * @param {(boolean)} toHSL If true, an hsl() or hsla() value will be returned instead of rgb() or rgba()\n\t\t\t * @return {Array.<number>} An array containing red, green, and blue (and optionally alpha) in that order, or if the toHSL parameter was true, the array will contain hue, saturation and lightness (and optionally alpha) in that order. Always numbers unless there's a relative prefix found in an hsl() or hsla() string and toHSL is true.\n\t\t\t */\n\t\t\t_parseColor = CSSPlugin.parseColor = function(v, toHSL) {\n\t\t\t\tvar a, r, g, b, h, s, l, max, min, d, wasHSL;\n\t\t\t\tif (!v) {\n\t\t\t\t\ta = _colorLookup.black;\n\t\t\t\t} else if (typeof(v) === \"number\") {\n\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t} else {\n\t\t\t\t\tif (v.charAt(v.length - 1) === \",\") { //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n\t\t\t\t\t\tv = v.substr(0, v.length - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (_colorLookup[v]) {\n\t\t\t\t\t\ta = _colorLookup[v];\n\t\t\t\t\t} else if (v.charAt(0) === \"#\") {\n\t\t\t\t\t\tif (v.length === 4) { //for shorthand like #9F0\n\t\t\t\t\t\t\tr = v.charAt(1);\n\t\t\t\t\t\t\tg = v.charAt(2);\n\t\t\t\t\t\t\tb = v.charAt(3);\n\t\t\t\t\t\t\tv = \"#\" + r + r + g + g + b + b;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tv = parseInt(v.substr(1), 16);\n\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t} else if (v.substr(0, 3) === \"hsl\") {\n\t\t\t\t\t\ta = wasHSL = v.match(_numExp);\n\t\t\t\t\t\tif (!toHSL) {\n\t\t\t\t\t\t\th = (Number(a[0]) % 360) / 360;\n\t\t\t\t\t\t\ts = Number(a[1]) / 100;\n\t\t\t\t\t\t\tl = Number(a[2]) / 100;\n\t\t\t\t\t\t\tg = (l <= 0.5) ? l * (s + 1) : l + s - l * s;\n\t\t\t\t\t\t\tr = l * 2 - g;\n\t\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ta[0] = _hue(h + 1 / 3, r, g);\n\t\t\t\t\t\t\ta[1] = _hue(h, r, g);\n\t\t\t\t\t\t\ta[2] = _hue(h - 1 / 3, r, g);\n\t\t\t\t\t\t} else if (v.indexOf(\"=\") !== -1) { //if relative values are found, just return the raw strings with the relative prefixes in place.\n\t\t\t\t\t\t\treturn v.match(_relNumExp);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = v.match(_numExp) || _colorLookup.transparent;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = Number(a[0]);\n\t\t\t\t\ta[1] = Number(a[1]);\n\t\t\t\t\ta[2] = Number(a[2]);\n\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (toHSL && !wasHSL) {\n\t\t\t\t\tr = a[0] / 255;\n\t\t\t\t\tg = a[1] / 255;\n\t\t\t\t\tb = a[2] / 255;\n\t\t\t\t\tmax = Math.max(r, g, b);\n\t\t\t\t\tmin = Math.min(r, g, b);\n\t\t\t\t\tl = (max + min) / 2;\n\t\t\t\t\tif (max === min) {\n\t\t\t\t\t\th = s = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\td = max - min;\n\t\t\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\t\t\th = (max === r) ? (g - b) / d + (g < b ? 6 : 0) : (max === g) ? (b - r) / d + 2 : (r - g) / d + 4;\n\t\t\t\t\t\th *= 60;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = (h + 0.5) | 0;\n\t\t\t\t\ta[1] = (s * 100 + 0.5) | 0;\n\t\t\t\t\ta[2] = (l * 100 + 0.5) | 0;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t_formatColors = function(s, toHSL) {\n\t\t\t\tvar colors = s.match(_colorExp) || [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\tparsed = \"\",\n\t\t\t\t\ti, color, temp;\n\t\t\t\tif (!colors.length) {\n\t\t\t\t\treturn s;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < colors.length; i++) {\n\t\t\t\t\tcolor = colors[i];\n\t\t\t\t\ttemp = s.substr(charIndex, s.indexOf(color, charIndex)-charIndex);\n\t\t\t\t\tcharIndex += temp.length + color.length;\n\t\t\t\t\tcolor = _parseColor(color, toHSL);\n\t\t\t\t\tif (color.length === 3) {\n\t\t\t\t\t\tcolor.push(1);\n\t\t\t\t\t}\n\t\t\t\t\tparsed += temp + (toHSL ? \"hsla(\" + color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : \"rgba(\" + color.join(\",\")) + \")\";\n\t\t\t\t}\n\t\t\t\treturn parsed + s.substr(charIndex);\n\t\t\t},\n\t\t\t_colorExp = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\"; //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.\n\n\t\tfor (p in _colorLookup) {\n\t\t\t_colorExp += \"|\" + p + \"\\\\b\";\n\t\t}\n\t\t_colorExp = new RegExp(_colorExp+\")\", \"gi\");\n\n\t\tCSSPlugin.colorStringFilter = function(a) {\n\t\t\tvar combined = a[0] + \" \" + a[1],\n\t\t\t\ttoHSL;\n\t\t\tif (_colorExp.test(combined)) {\n\t\t\t\ttoHSL = (combined.indexOf(\"hsl(\") !== -1 || combined.indexOf(\"hsla(\") !== -1);\n\t\t\t\ta[0] = _formatColors(a[0], toHSL);\n\t\t\t\ta[1] = _formatColors(a[1], toHSL);\n\t\t\t}\n\t\t\t_colorExp.lastIndex = 0;\n\t\t};\n\n\t\tif (!TweenLite.defaultStringFilter) {\n\t\t\tTweenLite.defaultStringFilter = CSSPlugin.colorStringFilter;\n\t\t}\n\n\t\t/**\n\t\t * @private Returns a formatter function that handles taking a string (or number in some cases) and returning a consistently formatted one in terms of delimiters, quantity of values, etc. For example, we may get boxShadow values defined as \"0px red\" or \"0px 0px 10px rgb(255,0,0)\" or \"0px 0px 20px 20px #F00\" and we need to ensure that what we get back is described with 4 numbers and a color. This allows us to feed it into the _parseComplex() method and split the values up appropriately. The neat thing about this _getFormatter() function is that the dflt defines a pattern as well as a default, so for example, _getFormatter(\"0px 0px 0px 0px #777\", true) not only sets the default as 0px for all distances and #777 for the color, but also sets the pattern such that 4 numbers and a color will always get returned.\n\t\t * @param {!string} dflt The default value and pattern to follow. So \"0px 0px 0px 0px #777\" will ensure that 4 numbers and a color will always get returned.\n\t\t * @param {boolean=} clr If true, the values should be searched for color-related data. For example, boxShadow values typically contain a color whereas borderRadius don't.\n\t\t * @param {boolean=} collapsible If true, the value is a top/left/right/bottom style one that acts like margin or padding, where if only one value is received, it's used for all 4; if 2 are received, the first is duplicated for 3rd (bottom) and the 2nd is duplicated for the 4th spot (left), etc.\n\t\t * @return {Function} formatter function\n\t\t */\n\t\tvar _getFormatter = function(dflt, clr, collapsible, multi) {\n\t\t\t\tif (dflt == null) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tvar dColor = clr ? (dflt.match(_colorExp) || [\"\"])[0] : \"\",\n\t\t\t\t\tdVals = dflt.split(dColor).join(\"\").match(_valuesExp) || [],\n\t\t\t\t\tpfx = dflt.substr(0, dflt.indexOf(dVals[0])),\n\t\t\t\t\tsfx = (dflt.charAt(dflt.length - 1) === \")\") ? \")\" : \"\",\n\t\t\t\t\tdelim = (dflt.indexOf(\" \") !== -1) ? \" \" : \",\",\n\t\t\t\t\tnumVals = dVals.length,\n\t\t\t\t\tdSfx = (numVals > 0) ? dVals[0].replace(_numExp, \"\") : \"\",\n\t\t\t\t\tformatter;\n\t\t\t\tif (!numVals) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tif (clr) {\n\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\tvar color, vals, i, a;\n\t\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolor = (v.match(_colorExp) || [dColor])[0];\n\t\t\t\t\t\tvals = v.split(color).join(\"\").match(_valuesExp) || [];\n\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pfx + vals.join(delim) + delim + color + sfx + (v.indexOf(\"inset\") !== -1 ? \" inset\" : \"\");\n\t\t\t\t\t};\n\t\t\t\t\treturn formatter;\n\n\t\t\t\t}\n\t\t\t\tformatter = function(v) {\n\t\t\t\t\tvar vals, a, i;\n\t\t\t\t\tif (typeof(v) === \"number\") {\n\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn a.join(\",\");\n\t\t\t\t\t}\n\t\t\t\t\tvals = v.match(delim === \",\" ? _valuesExp : _valuesExpWithCommas) || [];\n\t\t\t\t\ti = vals.length;\n\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn ((pfx && v !== \"none\") ? v.substr(0, v.indexOf(vals[0])) || pfx : pfx) + vals.join(delim) + sfx; //note: prefix might be different, like for clipPath it could start with inset( or polygon(\n\t\t\t\t};\n\t\t\t\treturn formatter;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private returns a formatter function that's used for edge-related values like marginTop, marginLeft, paddingBottom, paddingRight, etc. Just pass a comma-delimited list of property names related to the edges.\n\t\t\t * @param {!string} props a comma-delimited list of property names in order from top to left, like \"marginTop,marginRight,marginBottom,marginLeft\"\n\t\t\t * @return {Function} a formatter function\n\t\t\t */\n\t\t\t_getEdgeParser = function(props) {\n\t\t\t\tprops = props.split(\",\");\n\t\t\t\treturn function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\tvar a = (e + \"\").split(\" \"),\n\t\t\t\t\t\ti;\n\t\t\t\t\tvars = {};\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tvars[props[i]] = a[i] = a[i] || a[(((i - 1) / 2) >> 0)];\n\t\t\t\t\t}\n\t\t\t\t\treturn cssp.parse(t, vars, pt, plugin);\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t// @private used when other plugins must tween values first, like BezierPlugin or ThrowPropsPlugin, etc. That plugin's setRatio() gets called first so that the values are updated, and then we loop through the MiniPropTweens which handle copying the values into their appropriate slots so that they can then be applied correctly in the main CSSPlugin setRatio() method. Remember, we typically create a proxy object that has a bunch of uniquely-named properties that we feed to the sub-plugin and it does its magic normally, and then we must interpret those values and apply them to the css because often numbers must get combined/concatenated, suffixes added, etc. to work with css, like boxShadow could have 4 values plus a color.\n\t\t\t_setPluginRatio = _internals._setPluginRatio = function(v) {\n\t\t\t\tthis.plugin.setRatio(v);\n\t\t\t\tvar d = this.data,\n\t\t\t\t\tproxy = d.proxy,\n\t\t\t\t\tmpt = d.firstMPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval, pt, i, str, p;\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tval = proxy[mpt.v];\n\t\t\t\t\tif (mpt.r) {\n\t\t\t\t\t\tval = mpt.r(val);\n\t\t\t\t\t} else if (val < min && val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tmpt.t[mpt.p] = val;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tif (d.autoRotate) {\n\t\t\t\t\td.autoRotate.rotation = d.mod ? d.mod.call(this._tween, proxy.rotation, this.t, this._tween) : proxy.rotation; //special case for ModifyPlugin to hook into an auto-rotating bezier\n\t\t\t\t}\n\t\t\t\t//at the end, we must set the CSSPropTween's \"e\" (end) value dynamically here because that's what is used in the final setRatio() method. Same for \"b\" at the beginning.\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tmpt = d.firstMPT;\n\t\t\t\t\tp = (v === 1) ? \"e\" : \"b\";\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tpt = mpt.t;\n\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\tpt[p] = pt.s + pt.xs0;\n\t\t\t\t\t\t} else if (pt.type === 1) {\n\t\t\t\t\t\t\tstr = pt.xs0 + pt.s + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[p] = str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private @constructor Used by a few SpecialProps to hold important values for proxies. For example, _parseToProxy() creates a MiniPropTween instance for each property that must get tweened on the proxy, and we record the original property name as well as the unique one we create for the proxy, plus whether or not the value needs to be rounded plus the original value.\n\t\t\t * @param {!Object} t target object whose property we're tweening (often a CSSPropTween)\n\t\t\t * @param {!string} p property name\n\t\t\t * @param {(number|string|object)} v value\n\t\t\t * @param {MiniPropTween=} next next MiniPropTween in the linked list\n\t\t\t * @param {boolean=} r if true, the tweened value should be rounded to the nearest integer\n\t\t\t */\n\t\t\tMiniPropTween = function(t, p, v, next, r) {\n\t\t\t\tthis.t = t;\n\t\t\t\tthis.p = p;\n\t\t\t\tthis.v = v;\n\t\t\t\tthis.r = r;\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t\tthis._next = next;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Most other plugins (like BezierPlugin and ThrowPropsPlugin and others) can only tween numeric values, but CSSPlugin must accommodate special values that have a bunch of extra data (like a suffix or strings between numeric values, etc.). For example, boxShadow has values like \"10px 10px 20px 30px rgb(255,0,0)\" which would utterly confuse other plugins. This method allows us to split that data apart and grab only the numeric data and attach it to uniquely-named properties of a generic proxy object ({}) so that we can feed that to virtually any plugin to have the numbers tweened. However, we must also keep track of which properties from the proxy go with which CSSPropTween values and instances. So we create a linked list of MiniPropTweens. Each one records a target (the original CSSPropTween), property (like \"s\" or \"xn1\" or \"xn2\") that we're tweening and the unique property name that was used for the proxy (like \"boxShadow_xn1\" and \"boxShadow_xn2\") and whether or not they need to be rounded. That way, in the _setPluginRatio() method we can simply copy the values over from the proxy to the CSSPropTween instance(s). Then, when the main CSSPlugin setRatio() method runs and applies the CSSPropTween values accordingly, they're updated nicely. So the external plugin tweens the numbers, _setPluginRatio() copies them over, and setRatio() acts normally, applying css-specific values to the element.\n\t\t\t * This method returns an object that has the following properties:\n\t\t\t *  - proxy: a generic object containing the starting values for all the properties that will be tweened by the external plugin.  This is what we feed to the external _onInitTween() as the target\n\t\t\t *  - end: a generic object containing the ending values for all the properties that will be tweened by the external plugin. This is what we feed to the external plugin's _onInitTween() as the destination values\n\t\t\t *  - firstMPT: the first MiniPropTween in the linked list\n\t\t\t *  - pt: the first CSSPropTween in the linked list that was created when parsing. If shallow is true, this linked list will NOT attach to the one passed into the _parseToProxy() as the \"pt\" (4th) parameter.\n\t\t\t * @param {!Object} t target object to be tweened\n\t\t\t * @param {!(Object|string)} vars the object containing the information about the tweening values (typically the end/destination values) that should be parsed\n\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance\n\t\t\t * @param {CSSPropTween=} pt the next CSSPropTween in the linked list\n\t\t\t * @param {TweenPlugin=} plugin the external TweenPlugin instance that will be handling tweening the numeric values\n\t\t\t * @param {boolean=} shallow if true, the resulting linked list from the parse will NOT be attached to the CSSPropTween that was passed in as the \"pt\" (4th) parameter.\n\t\t\t * @return An object containing the following properties: proxy, end, firstMPT, and pt (see above for descriptions)\n\t\t\t */\n\t\t\t_parseToProxy = _internals._parseToProxy = function(t, vars, cssp, pt, plugin, shallow) {\n\t\t\t\tvar bpt = pt,\n\t\t\t\t\tstart = {},\n\t\t\t\t\tend = {},\n\t\t\t\t\ttransform = cssp._transform,\n\t\t\t\t\toldForce = _forcePT,\n\t\t\t\t\ti, p, xp, mpt, firstPT;\n\t\t\t\tcssp._transform = null;\n\t\t\t\t_forcePT = vars;\n\t\t\t\tpt = firstPT = cssp.parse(t, vars, pt, plugin);\n\t\t\t\t_forcePT = oldForce;\n\t\t\t\t//break off from the linked list so the new ones are isolated.\n\t\t\t\tif (shallow) {\n\t\t\t\t\tcssp._transform = transform;\n\t\t\t\t\tif (bpt) {\n\t\t\t\t\t\tbpt._prev = null;\n\t\t\t\t\t\tif (bpt._prev) {\n\t\t\t\t\t\t\tbpt._prev._next = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (pt && pt !== bpt) {\n\t\t\t\t\tif (pt.type <= 1) {\n\t\t\t\t\t\tp = pt.p;\n\t\t\t\t\t\tend[p] = pt.s + pt.c;\n\t\t\t\t\t\tstart[p] = pt.s;\n\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, \"s\", p, mpt, pt.r);\n\t\t\t\t\t\t\tpt.c = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt.type === 1) {\n\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\twhile (--i > 0) {\n\t\t\t\t\t\t\t\txp = \"xn\" + i;\n\t\t\t\t\t\t\t\tp = pt.p + \"_\" + xp;\n\t\t\t\t\t\t\t\tend[p] = pt.data[xp];\n\t\t\t\t\t\t\t\tstart[p] = pt[xp];\n\t\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, xp, p, mpt, pt.rxp[xp]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn {proxy:start, end:end, firstMPT:mpt, pt:firstPT};\n\t\t\t},\n\n\n\n\t\t\t/**\n\t\t\t * @constructor Each property that is tweened has at least one CSSPropTween associated with it. These instances store important information like the target, property, starting value, amount of change, etc. They can also optionally have a number of \"extra\" strings and numeric values named xs1, xn1, xs2, xn2, xs3, xn3, etc. where \"s\" indicates string and \"n\" indicates number. These can be pieced together in a complex-value tween (type:1) that has alternating types of data like a string, number, string, number, etc. For example, boxShadow could be \"5px 5px 8px rgb(102, 102, 51)\". In that value, there are 6 numbers that may need to tween and then pieced back together into a string again with spaces, suffixes, etc. xs0 is special in that it stores the suffix for standard (type:0) tweens, -OR- the first string (prefix) in a complex-value (type:1) CSSPropTween -OR- it can be the non-tweening value in a type:-1 CSSPropTween. We do this to conserve memory.\n\t\t\t * CSSPropTweens have the following optional properties as well (not defined through the constructor):\n\t\t\t *  - l: Length in terms of the number of extra properties that the CSSPropTween has (default: 0). For example, for a boxShadow we may need to tween 5 numbers in which case l would be 5; Keep in mind that the start/end values for the first number that's tweened are always stored in the s and c properties to conserve memory. All additional values thereafter are stored in xn1, xn2, etc.\n\t\t\t *  - xfirst: The first instance of any sub-CSSPropTweens that are tweening properties of this instance. For example, we may split up a boxShadow tween so that there's a main CSSPropTween of type:1 that has various xs* and xn* values associated with the h-shadow, v-shadow, blur, color, etc. Then we spawn a CSSPropTween for each of those that has a higher priority and runs BEFORE the main CSSPropTween so that the values are all set by the time it needs to re-assemble them. The xfirst gives us an easy way to identify the first one in that chain which typically ends at the main one (because they're all prepende to the linked list)\n\t\t\t *  - plugin: The TweenPlugin instance that will handle the tweening of any complex values. For example, sometimes we don't want to use normal subtweens (like xfirst refers to) to tween the values - we might want ThrowPropsPlugin or BezierPlugin some other plugin to do the actual tweening, so we create a plugin instance and store a reference here. We need this reference so that if we get a request to round values or disable a tween, we can pass along that request.\n\t\t\t *  - data: Arbitrary data that needs to be stored with the CSSPropTween. Typically if we're going to have a plugin handle the tweening of a complex-value tween, we create a generic object that stores the END values that we're tweening to and the CSSPropTween's xs1, xs2, etc. have the starting values. We store that object as data. That way, we can simply pass that object to the plugin and use the CSSPropTween as the target.\n\t\t\t *  - setRatio: Only used for type:2 tweens that require custom functionality. In this case, we call the CSSPropTween's setRatio() method and pass the ratio each time the tween updates. This isn't quite as efficient as doing things directly in the CSSPlugin's setRatio() method, but it's very convenient and flexible.\n\t\t\t * @param {!Object} t Target object whose property will be tweened. Often a DOM element, but not always. It could be anything.\n\t\t\t * @param {string} p Property to tween (name). For example, to tween element.width, p would be \"width\".\n\t\t\t * @param {number} s Starting numeric value\n\t\t\t * @param {number} c Change in numeric value over the course of the entire tween. For example, if element.width starts at 5 and should end at 100, c would be 95.\n\t\t\t * @param {CSSPropTween=} next The next CSSPropTween in the linked list. If one is defined, we will define its _prev as the new instance, and the new instance's _next will be pointed at it.\n\t\t\t * @param {number=} type The type of CSSPropTween where -1 = a non-tweening value, 0 = a standard simple tween, 1 = a complex value (like one that has multiple numbers in a comma- or space-delimited string like border:\"1px solid red\"), and 2 = one that uses a custom setRatio function that does all of the work of applying the values on each update.\n\t\t\t * @param {string=} n Name of the property that should be used for overwriting purposes which is typically the same as p but not always. For example, we may need to create a subtween for the 2nd part of a \"clip:rect(...)\" tween in which case \"p\" might be xs1 but \"n\" is still \"clip\"\n\t\t\t * @param {boolean=} r If true, the value(s) should be rounded\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority CSSPropTweens will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {string=} b Beginning value. We store this to ensure that it is EXACTLY what it was when the tween began without any risk of interpretation issues.\n\t\t\t * @param {string=} e Ending value. We store this to ensure that it is EXACTLY what the user defined at the end of the tween without any risk of interpretation issues.\n\t\t\t */\n\t\t\tCSSPropTween = _internals.CSSPropTween = function(t, p, s, c, next, type, n, r, pr, b, e) {\n\t\t\t\tthis.t = t; //target\n\t\t\t\tthis.p = p; //property\n\t\t\t\tthis.s = s; //starting value\n\t\t\t\tthis.c = c; //change value\n\t\t\t\tthis.n = n || p; //name that this CSSPropTween should be associated to (usually the same as p, but not always - n is what overwriting looks at)\n\t\t\t\tif (!(t instanceof CSSPropTween)) {\n\t\t\t\t\t_overwriteProps.push(this.n);\n\t\t\t\t}\n\t\t\t\tthis.r = !r ? r : (typeof(r) === \"function\") ? r : Math.round; //round (boolean)\n\t\t\t\tthis.type = type || 0; //0 = normal tween, -1 = non-tweening (in which case xs0 will be applied to the target's property, like tp.t[tp.p] = tp.xs0), 1 = complex-value SpecialProp, 2 = custom setRatio() that does all the work\n\t\t\t\tif (pr) {\n\t\t\t\t\tthis.pr = pr;\n\t\t\t\t\t_hasPriority = true;\n\t\t\t\t}\n\t\t\t\tthis.b = (b === undefined) ? s : b;\n\t\t\t\tthis.e = (e === undefined) ? s + c : e;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis._next = next;\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_addNonTweeningNumericPT = function(target, prop, start, end, next, overwriteProp) { //cleans up some code redundancies and helps minification. Just a fast way to add a NUMERIC non-tweening CSSPropTween\n\t\t\t\tvar pt = new CSSPropTween(target, prop, start, end - start, next, -1, overwriteProp);\n\t\t\t\tpt.b = start;\n\t\t\t\tpt.e = pt.xs0 = end;\n\t\t\t\treturn pt;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Takes a target, the beginning value and ending value (as strings) and parses them into a CSSPropTween (possibly with child CSSPropTweens) that accommodates multiple numbers, colors, comma-delimited values, etc. For example:\n\t\t\t * sp.parseComplex(element, \"boxShadow\", \"5px 10px 20px rgb(255,102,51)\", \"0px 0px 0px red\", true, \"0px 0px 0px rgb(0,0,0,0)\", pt);\n\t\t\t * It will walk through the beginning and ending values (which should be in the same format with the same number and type of values) and figure out which parts are numbers, what strings separate the numeric/tweenable values, and then create the CSSPropTweens accordingly. If a plugin is defined, no child CSSPropTweens will be created. Instead, the ending values will be stored in the \"data\" property of the returned CSSPropTween like: {s:-5, xn1:-10, xn2:-20, xn3:255, xn4:0, xn5:0} so that it can be fed to any other plugin and it'll be plain numeric tweens but the recomposition of the complex value will be handled inside CSSPlugin's setRatio().\n\t\t\t * If a setRatio is defined, the type of the CSSPropTween will be set to 2 and recomposition of the values will be the responsibility of that method.\n\t\t\t *\n\t\t\t * @param {!Object} t Target whose property will be tweened\n\t\t\t * @param {!string} p Property that will be tweened (its name, like \"left\" or \"backgroundColor\" or \"boxShadow\")\n\t\t\t * @param {string} b Beginning value\n\t\t\t * @param {string} e Ending value\n\t\t\t * @param {boolean} clrs If true, the value could contain a color value like \"rgb(255,0,0)\" or \"#F00\" or \"red\". The default is false, so no colors will be recognized (a performance optimization)\n\t\t\t * @param {(string|number|Object)} dflt The default beginning value that should be used if no valid beginning value is defined or if the number of values inside the complex beginning and ending values don't match\n\t\t\t * @param {?CSSPropTween} pt CSSPropTween instance that is the current head of the linked list (we'll prepend to this).\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority properties will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {TweenPlugin=} plugin If a plugin should handle the tweening of extra properties, pass the plugin instance here. If one is defined, then NO subtweens will be created for any extra properties (the properties will be created - just not additional CSSPropTween instances to tween them) because the plugin is expected to do so. However, the end values WILL be populated in the \"data\" property, like {s:100, xn1:50, xn2:300}\n\t\t\t * @param {function(number)=} setRatio If values should be set in a custom function instead of being pieced together in a type:1 (complex-value) CSSPropTween, define that custom function here.\n\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parseComplex() call.\n\t\t\t */\n\t\t\t_parseComplex = CSSPlugin.parseComplex = function(t, p, b, e, clrs, dflt, pt, pr, plugin, setRatio) {\n\t\t\t\t//DEBUG: _log(\"parseComplex: \"+p+\", b: \"+b+\", e: \"+e);\n\t\t\t\tb = b || dflt || \"\";\n\t\t\t\tif (typeof(e) === \"function\") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, (setRatio ? 2 : 1), null, false, pr, b, e);\n\t\t\t\te += \"\"; //ensures it's a string\n\t\t\t\tif (clrs && _colorExp.test(e + b)) { //if colors are found, normalize the formatting to rgba() or hsla().\n\t\t\t\t\te = [b, e];\n\t\t\t\t\tCSSPlugin.colorStringFilter(e);\n\t\t\t\t\tb = e[0];\n\t\t\t\t\te = e[1];\n\t\t\t\t}\n\t\t\t\tvar ba = b.split(\", \").join(\",\").split(\" \"), //beginning array\n\t\t\t\t\tea = e.split(\", \").join(\",\").split(\" \"), //ending array\n\t\t\t\t\tl = ba.length,\n\t\t\t\t\tautoRound = (_autoRound !== false),\n\t\t\t\t\ti, xi, ni, bv, ev, bnums, enums, bn, hasAlpha, temp, cv, str, useHSL;\n\t\t\t\tif (e.indexOf(\",\") !== -1 || b.indexOf(\",\") !== -1) {\n\t\t\t\t\tif ((e + b).indexOf(\"rgb\") !== -1 || (e + b).indexOf(\"hsl\") !== -1) { //keep rgb(), rgba(), hsl(), and hsla() values together! (remember, we're splitting on spaces)\n\t\t\t\t\t\tba = ba.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\t\tea = ea.join(\" \").replace(_commasOutsideParenExp, \", \").split(\" \");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tba = ba.join(\" \").split(\",\").join(\", \").split(\" \");\n\t\t\t\t\t\tea = ea.join(\" \").split(\",\").join(\", \").split(\" \");\n\t\t\t\t\t}\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tif (l !== ea.length) {\n\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\tba = (dflt || \"\").split(\" \");\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = setRatio;\n\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tbv = ba[i];\n\t\t\t\t\tev = ea[i] + \"\";\n\t\t\t\t\tbn = parseFloat(bv);\n\t\t\t\t\t//if the value begins with a number (most common). It's fine if it has a suffix like px\n\t\t\t\t\tif (bn || bn === 0) {\n\t\t\t\t\t\tpt.appendXtra(\"\", bn, _parseChange(ev, bn), ev.replace(_relNumExp, \"\"), (autoRound && ev.indexOf(\"px\") !== -1) ? Math.round : false, true);\n\n\t\t\t\t\t//if the value is a color\n\t\t\t\t\t} else if (clrs && _colorExp.test(bv)) {\n\t\t\t\t\t\tstr = ev.indexOf(\")\") + 1;\n\t\t\t\t\t\tstr = \")\" + (str ? ev.substr(str) : \"\"); //if there's a comma or ) at the end, retain it.\n\t\t\t\t\t\tuseHSL = (ev.indexOf(\"hsl\") !== -1 && _supportsOpacity);\n\t\t\t\t\t\ttemp = ev; //original string value so we can look for any prefix later.\n\t\t\t\t\t\tbv = _parseColor(bv, useHSL);\n\t\t\t\t\t\tev = _parseColor(ev, useHSL);\n\t\t\t\t\t\thasAlpha = (bv.length + ev.length > 6);\n\t\t\t\t\t\tif (hasAlpha && !_supportsOpacity && ev[3] === 0) { //older versions of IE don't support rgba(), so if the destination alpha is 0, just use \"transparent\" for the end color\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += pt.l ? \" transparent\" : \"transparent\";\n\t\t\t\t\t\t\tpt.e = pt.e.split(ea[i]).join(\"transparent\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!_supportsOpacity) { //old versions of IE don't support rgba().\n\t\t\t\t\t\t\t\thasAlpha = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (useHSL) {\n\t\t\t\t\t\t\t\tpt.appendXtra(temp.substr(0, temp.indexOf(\"hsl\")) + (hasAlpha ? \"hsla(\" : \"hsl(\"), bv[0], _parseChange(ev[0], bv[0]), \",\", false, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], _parseChange(ev[1], bv[1]), \"%,\", false)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], _parseChange(ev[2], bv[2]), (hasAlpha ? \"%,\" : \"%\" + str), false);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt.appendXtra(temp.substr(0, temp.indexOf(\"rgb\")) + (hasAlpha ? \"rgba(\" : \"rgb(\"), bv[0], ev[0] - bv[0], \",\", Math.round, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[1], ev[1] - bv[1], \",\", Math.round)\n\t\t\t\t\t\t\t\t\t.appendXtra(\"\", bv[2], ev[2] - bv[2], (hasAlpha ? \",\" : str), Math.round);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hasAlpha) {\n\t\t\t\t\t\t\t\tbv = (bv.length < 4) ? 1 : bv[3];\n\t\t\t\t\t\t\t\tpt.appendXtra(\"\", bv, ((ev.length < 4) ? 1 : ev[3]) - bv, str, false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_colorExp.lastIndex = 0; //otherwise the test() on the RegExp could move the lastIndex and taint future results.\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbnums = bv.match(_numExp); //gets each group of numbers in the beginning value string and drops them into an array\n\n\t\t\t\t\t\t//if no number is found, treat it as a non-tweening value and just append the string to the current xs.\n\t\t\t\t\t\tif (!bnums) {\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += (pt.l || pt[\"xs\" + pt.l]) ? \" \" + ev : ev;\n\n\t\t\t\t\t\t//loop through all the numbers that are found and construct the extra values on the pt.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tenums = ev.match(_relNumExp); //get each group of numbers in the end value string and drop them into an array. We allow relative values too, like +=50 or -=.5\n\t\t\t\t\t\t\tif (!enums || enums.length !== bnums.length) {\n\t\t\t\t\t\t\t\t//DEBUG: _log(\"mismatched formatting detected on \" + p + \" (\" + b + \" vs \" + e + \")\");\n\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tni = 0;\n\t\t\t\t\t\t\tfor (xi = 0; xi < bnums.length; xi++) {\n\t\t\t\t\t\t\t\tcv = bnums[xi];\n\t\t\t\t\t\t\t\ttemp = bv.indexOf(cv, ni);\n\t\t\t\t\t\t\t\tpt.appendXtra(bv.substr(ni, temp - ni), Number(cv), _parseChange(enums[xi], cv), \"\", (autoRound && bv.substr(temp + cv.length, 2) === \"px\") ? Math.round : false, (xi === 0));\n\t\t\t\t\t\t\t\tni = temp + cv.length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[\"xs\" + pt.l] += bv.substr(ni);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//if there are relative values (\"+=\" or \"-=\" prefix), we need to adjust the ending value to eliminate the prefixes and combine the values properly.\n\t\t\t\tif (e.indexOf(\"=\") !== -1) if (pt.data) {\n\t\t\t\t\tstr = pt.xs0 + pt.data.s;\n\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\tstr += pt[\"xs\" + i] + pt.data[\"xn\" + i];\n\t\t\t\t\t}\n\t\t\t\t\tpt.e = str + pt[\"xs\" + i];\n\t\t\t\t}\n\t\t\t\tif (!pt.l) {\n\t\t\t\t\tpt.type = -1;\n\t\t\t\t\tpt.xs0 = pt.e;\n\t\t\t\t}\n\t\t\t\treturn pt.xfirst || pt;\n\t\t\t},\n\t\t\ti = 9;\n\n\n\t\tp = CSSPropTween.prototype;\n\t\tp.l = p.pr = 0; //length (number of extra properties like xn1, xn2, xn3, etc.\n\t\twhile (--i > 0) {\n\t\t\tp[\"xn\" + i] = 0;\n\t\t\tp[\"xs\" + i] = \"\";\n\t\t}\n\t\tp.xs0 = \"\";\n\t\tp._next = p._prev = p.xfirst = p.data = p.plugin = p.setRatio = p.rxp = null;\n\n\n\t\t/**\n\t\t * Appends and extra tweening value to a CSSPropTween and automatically manages any prefix and suffix strings. The first extra value is stored in the s and c of the main CSSPropTween instance, but thereafter any extras are stored in the xn1, xn2, xn3, etc. The prefixes and suffixes are stored in the xs0, xs1, xs2, etc. properties. For example, if I walk through a clip value like \"rect(10px, 5px, 0px, 20px)\", the values would be stored like this:\n\t\t * xs0:\"rect(\", s:10, xs1:\"px, \", xn1:5, xs2:\"px, \", xn2:0, xs3:\"px, \", xn3:20, xn4:\"px)\"\n\t\t * And they'd all get joined together when the CSSPlugin renders (in the setRatio() method).\n\t\t * @param {string=} pfx Prefix (if any)\n\t\t * @param {!number} s Starting value\n\t\t * @param {!number} c Change in numeric value over the course of the entire tween. For example, if the start is 5 and the end is 100, the change would be 95.\n\t\t * @param {string=} sfx Suffix (if any)\n\t\t * @param {boolean=} r Round (if true).\n\t\t * @param {boolean=} pad If true, this extra value should be separated by the previous one by a space. If there is no previous extra and pad is true, it will automatically drop the space.\n\t\t * @return {CSSPropTween} returns itself so that multiple methods can be chained together.\n\t\t */\n\t\tp.appendXtra = function(pfx, s, c, sfx, r, pad) {\n\t\t\tvar pt = this,\n\t\t\t\tl = pt.l;\n\t\t\tpt[\"xs\" + l] += (pad && (l || pt[\"xs\" + l])) ? \" \" + pfx : pfx || \"\";\n\t\t\tif (!c) if (l !== 0 && !pt.plugin) { //typically we'll combine non-changing values right into the xs to optimize performance, but we don't combine them when there's a plugin that will be tweening the values because it may depend on the values being split apart, like for a bezier, if a value doesn't change between the first and second iteration but then it does on the 3rd, we'll run into trouble because there's no xn slot for that value!\n\t\t\t\tpt[\"xs\" + l] += s + (sfx || \"\");\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.l++;\n\t\t\tpt.type = pt.setRatio ? 2 : 1;\n\t\t\tpt[\"xs\" + pt.l] = sfx || \"\";\n\t\t\tif (l > 0) {\n\t\t\t\tpt.data[\"xn\" + l] = s + c;\n\t\t\t\tpt.rxp[\"xn\" + l] = r; //round extra property (we need to tap into this in the _parseToProxy() method)\n\t\t\t\tpt[\"xn\" + l] = s;\n\t\t\t\tif (!pt.plugin) {\n\t\t\t\t\tpt.xfirst = new CSSPropTween(pt, \"xn\" + l, s, c, pt.xfirst || pt, 0, pt.n, r, pt.pr);\n\t\t\t\t\tpt.xfirst.xs0 = 0; //just to ensure that the property stays numeric which helps modern browsers speed up processing. Remember, in the setRatio() method, we do pt.t[pt.p] = val + pt.xs0 so if pt.xs0 is \"\" (the default), it'll cast the end value as a string. When a property is a number sometimes and a string sometimes, it prevents the compiler from locking in the data type, slowing things down slightly.\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.data = {s:s + c};\n\t\t\tpt.rxp = {};\n\t\t\tpt.s = s;\n\t\t\tpt.c = c;\n\t\t\tpt.r = r;\n\t\t\treturn pt;\n\t\t};\n\n\t\t/**\n\t\t * @constructor A SpecialProp is basically a css property that needs to be treated in a non-standard way, like if it may contain a complex value like boxShadow:\"5px 10px 15px rgb(255, 102, 51)\" or if it is associated with another plugin like ThrowPropsPlugin or BezierPlugin. Every SpecialProp is associated with a particular property name like \"boxShadow\" or \"throwProps\" or \"bezier\" and it will intercept those values in the vars object that's passed to the CSSPlugin and handle them accordingly.\n\t\t * @param {!string} p Property name (like \"boxShadow\" or \"throwProps\")\n\t\t * @param {Object=} options An object containing any of the following configuration options:\n\t\t *                      - defaultValue: the default value\n\t\t *                      - parser: A function that should be called when the associated property name is found in the vars. This function should return a CSSPropTween instance and it should ensure that it is properly inserted into the linked list. It will receive 4 paramters: 1) The target, 2) The value defined in the vars, 3) The CSSPlugin instance (whose _firstPT should be used for the linked list), and 4) A computed style object if one was calculated (this is a speed optimization that allows retrieval of starting values quicker)\n\t\t *                      - formatter: a function that formats any value received for this special property (for example, boxShadow could take \"5px 5px red\" and format it to \"5px 5px 0px 0px red\" so that both the beginning and ending values have a common order and quantity of values.)\n\t\t *                      - prefix: if true, we'll determine whether or not this property requires a vendor prefix (like Webkit or Moz or ms or O)\n\t\t *                      - color: set this to true if the value for this SpecialProp may contain color-related values like rgb(), rgba(), etc.\n\t\t *                      - priority: priority in the linked list order. Higher priority SpecialProps will be updated before lower priority ones. The default priority is 0.\n\t\t *                      - multi: if true, the formatter should accommodate a comma-delimited list of values, like boxShadow could have multiple boxShadows listed out.\n\t\t *                      - collapsible: if true, the formatter should treat the value like it's a top/right/bottom/left value that could be collapsed, like \"5px\" would apply to all, \"5px, 10px\" would use 5px for top/bottom and 10px for right/left, etc.\n\t\t *                      - keyword: a special keyword that can [optionally] be found inside the value (like \"inset\" for boxShadow). This allows us to validate beginning/ending values to make sure they match (if the keyword is found in one, it'll be added to the other for consistency by default).\n\t\t */\n\t\tvar SpecialProp = function(p, options) {\n\t\t\t\toptions = options || {};\n\t\t\t\tthis.p = options.prefix ? _checkPropPrefix(p) || p : p;\n\t\t\t\t_specialProps[p] = _specialProps[this.p] = this;\n\t\t\t\tthis.format = options.formatter || _getFormatter(options.defaultValue, options.color, options.collapsible, options.multi);\n\t\t\t\tif (options.parser) {\n\t\t\t\t\tthis.parse = options.parser;\n\t\t\t\t}\n\t\t\t\tthis.clrs = options.color;\n\t\t\t\tthis.multi = options.multi;\n\t\t\t\tthis.keyword = options.keyword;\n\t\t\t\tthis.dflt = options.defaultValue;\n\t\t\t\tthis.allowFunc = options.allowFunc;\n\t\t\t\tthis.pr = options.priority || 0;\n\t\t\t},\n\n\t\t\t//shortcut for creating a new SpecialProp that can accept multiple properties as a comma-delimited list (helps minification). dflt can be an array for multiple values (we don't do a comma-delimited list because the default value may contain commas, like rect(0px,0px,0px,0px)). We attach this method to the SpecialProp class/object instead of using a private _createSpecialProp() method so that we can tap into it externally if necessary, like from another plugin.\n\t\t\t_registerComplexSpecialProp = _internals._registerComplexSpecialProp = function(p, options, defaults) {\n\t\t\t\tif (typeof(options) !== \"object\") {\n\t\t\t\t\toptions = {parser:defaults}; //to make backwards compatible with older versions of BezierPlugin and ThrowPropsPlugin\n\t\t\t\t}\n\t\t\t\tvar a = p.split(\",\"),\n\t\t\t\t\td = options.defaultValue,\n\t\t\t\t\ti, temp;\n\t\t\t\tdefaults = defaults || [d];\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\toptions.prefix = (i === 0 && options.prefix);\n\t\t\t\t\toptions.defaultValue = defaults[i] || d;\n\t\t\t\t\ttemp = new SpecialProp(a[i], options);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .js file.\n\t\t\t_registerPluginProp = _internals._registerPluginProp = function(p) {\n\t\t\t\tif (!_specialProps[p]) {\n\t\t\t\t\tvar pluginName = p.charAt(0).toUpperCase() + p.substr(1) + \"Plugin\";\n\t\t\t\t\t_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\tvar pluginClass = _globals.com.greensock.plugins[pluginName];\n\t\t\t\t\t\tif (!pluginClass) {\n\t\t\t\t\t\t\t_log(\"Error: \" + pluginName + \" js file not loaded.\");\n\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpluginClass._cssRegister();\n\t\t\t\t\t\treturn _specialProps[p].parse(t, e, p, cssp, pt, plugin, vars);\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t};\n\n\n\t\tp = SpecialProp.prototype;\n\n\t\t/**\n\t\t * Alias for _parseComplex() that automatically plugs in certain values for this SpecialProp, like its property name, whether or not colors should be sensed, the default value, and priority. It also looks for any keyword that the SpecialProp defines (like \"inset\" for boxShadow) and ensures that the beginning and ending values have the same number of values for SpecialProps where multi is true (like boxShadow and textShadow can have a comma-delimited list)\n\t\t * @param {!Object} t target element\n\t\t * @param {(string|number|object)} b beginning value\n\t\t * @param {(string|number|object)} e ending (destination) value\n\t\t * @param {CSSPropTween=} pt next CSSPropTween in the linked list\n\t\t * @param {TweenPlugin=} plugin If another plugin will be tweening the complex value, that TweenPlugin instance goes here.\n\t\t * @param {function=} setRatio If a custom setRatio() method should be used to handle this complex value, that goes here.\n\t\t * @return {CSSPropTween=} First CSSPropTween in the linked list\n\t\t */\n\t\tp.parseComplex = function(t, b, e, pt, plugin, setRatio) {\n\t\t\tvar kwd = this.keyword,\n\t\t\t\ti, ba, ea, l, bi, ei;\n\t\t\t//if this SpecialProp's value can contain a comma-delimited list of values (like boxShadow or textShadow), we must parse them in a special way, and look for a keyword (like \"inset\" for boxShadow) and ensure that the beginning and ending BOTH have it if the end defines it as such. We also must ensure that there are an equal number of values specified (we can't tween 1 boxShadow to 3 for example)\n\t\t\tif (this.multi) if (_commasOutsideParenExp.test(e) || _commasOutsideParenExp.test(b)) {\n\t\t\t\tba = b.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t\tea = e.replace(_commasOutsideParenExp, \"|\").split(\"|\");\n\t\t\t} else if (kwd) {\n\t\t\t\tba = [b];\n\t\t\t\tea = [e];\n\t\t\t}\n\t\t\tif (ea) {\n\t\t\t\tl = (ea.length > ba.length) ? ea.length : ba.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tb = ba[i] = ba[i] || this.dflt;\n\t\t\t\t\te = ea[i] = ea[i] || this.dflt;\n\t\t\t\t\tif (kwd) {\n\t\t\t\t\t\tbi = b.indexOf(kwd);\n\t\t\t\t\t\tei = e.indexOf(kwd);\n\t\t\t\t\t\tif (bi !== ei) {\n\t\t\t\t\t\t\tif (ei === -1) { //if the keyword isn't in the end value, remove it from the beginning one.\n\t\t\t\t\t\t\t\tba[i] = ba[i].split(kwd).join(\"\");\n\t\t\t\t\t\t\t} else if (bi === -1) { //if the keyword isn't in the beginning, add it.\n\t\t\t\t\t\t\t\tba[i] += \" \" + kwd;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tb = ba.join(\", \");\n\t\t\t\te = ea.join(\", \");\n\t\t\t}\n\t\t\treturn _parseComplex(t, this.p, b, e, this.clrs, this.dflt, pt, this.pr, plugin, setRatio);\n\t\t};\n\n\t\t/**\n\t\t * Accepts a target and end value and spits back a CSSPropTween that has been inserted into the CSSPlugin's linked list and conforms with all the conventions we use internally, like type:-1, 0, 1, or 2, setting up any extra property tweens, priority, etc. For example, if we have a boxShadow SpecialProp and call:\n\t\t * this._firstPT = sp.parse(element, \"5px 10px 20px rgb(2550,102,51)\", \"boxShadow\", this);\n\t\t * It should figure out the starting value of the element's boxShadow, compare it to the provided end value and create all the necessary CSSPropTweens of the appropriate types to tween the boxShadow. The CSSPropTween that gets spit back should already be inserted into the linked list (the 4th parameter is the current head, so prepend to that).\n\t\t * @param {!Object} t Target object whose property is being tweened\n\t\t * @param {Object} e End value as provided in the vars object (typically a string, but not always - like a throwProps would be an object).\n\t\t * @param {!string} p Property name\n\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance that should be associated with this tween.\n\t\t * @param {?CSSPropTween} pt The CSSPropTween that is the current head of the linked list (we'll prepend to it)\n\t\t * @param {TweenPlugin=} plugin If a plugin will be used to tween the parsed value, this is the plugin instance.\n\t\t * @param {Object=} vars Original vars object that contains the data for parsing.\n\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parse() call.\n\t\t */\n\t\tp.parse = function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\treturn this.parseComplex(t.style, this.format(_getStyle(t, this.p, _cs, false, this.dflt)), this.format(e), pt, plugin);\n\t\t};\n\n\t\t/**\n\t\t * Registers a special property that should be intercepted from any \"css\" objects defined in tweens. This allows you to handle them however you want without CSSPlugin doing it for you. The 2nd parameter should be a function that accepts 3 parameters:\n\t\t *  1) Target object whose property should be tweened (typically a DOM element)\n\t\t *  2) The end/destination value (could be a string, number, object, or whatever you want)\n\t\t *  3) The tween instance (you probably don't need to worry about this, but it can be useful for looking up information like the duration)\n\t\t *\n\t\t * Then, your function should return a function which will be called each time the tween gets rendered, passing a numeric \"ratio\" parameter to your function that indicates the change factor (usually between 0 and 1). For example:\n\t\t *\n\t\t * CSSPlugin.registerSpecialProp(\"myCustomProp\", function(target, value, tween) {\n\t\t *      var start = target.style.width;\n\t\t *      return function(ratio) {\n\t\t *              target.style.width = (start + value * ratio) + \"px\";\n\t\t *              console.log(\"set width to \" + target.style.width);\n\t\t *          }\n\t\t * }, 0);\n\t\t *\n\t\t * Then, when I do this tween, it will trigger my special property:\n\t\t *\n\t\t * TweenLite.to(element, 1, {css:{myCustomProp:100}});\n\t\t *\n\t\t * In the example, of course, we're just changing the width, but you can do anything you want.\n\t\t *\n\t\t * @param {!string} name Property name (or comma-delimited list of property names) that should be intercepted and handled by your function. For example, if I define \"myCustomProp\", then it would handle that portion of the following tween: TweenLite.to(element, 1, {css:{myCustomProp:100}})\n\t\t * @param {!function(Object, Object, Object, string):function(number)} onInitTween The function that will be called when a tween of this special property is performed. The function will receive 4 parameters: 1) Target object that should be tweened, 2) Value that was passed to the tween, 3) The tween instance itself (rarely used), and 4) The property name that's being tweened. Your function should return a function that should be called on every update of the tween. That function will receive a single parameter that is a \"change factor\" value (typically between 0 and 1) indicating the amount of change as a ratio. You can use this to determine how to set the values appropriately in your function.\n\t\t * @param {number=} priority Priority that helps the engine determine the order in which to set the properties (default: 0). Higher priority properties will be updated before lower priority ones.\n\t\t */\n\t\tCSSPlugin.registerSpecialProp = function(name, onInitTween, priority) {\n\t\t\t_registerComplexSpecialProp(name, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\tvar rv = new CSSPropTween(t, p, 0, 0, pt, 2, p, false, priority);\n\t\t\t\trv.plugin = plugin;\n\t\t\t\trv.setRatio = onInitTween(t, e, cssp._tween, p);\n\t\t\t\treturn rv;\n\t\t\t}, priority:priority});\n\t\t};\n\n\n\n\n\n\n\t\t//transform-related methods and properties\n\t\tCSSPlugin.useSVGTransformAttr = true; //Safari and Firefox both have some rendering bugs when applying CSS transforms to SVG elements, so default to using the \"transform\" attribute instead (users can override this).\n\t\tvar _transformProps = (\"scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\").split(\",\"),\n\t\t\t_transformProp = _checkPropPrefix(\"transform\"), //the Javascript (camelCase) transform property, like msTransform, WebkitTransform, MozTransform, or OTransform.\n\t\t\t_transformPropCSS = _prefixCSS + \"transform\",\n\t\t\t_transformOriginProp = _checkPropPrefix(\"transformOrigin\"),\n\t\t\t_supports3D = (_checkPropPrefix(\"perspective\") !== null),\n\t\t\tTransform = _internals.Transform = function() {\n\t\t\t\tthis.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;\n\t\t\t\tthis.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || \"auto\";\n\t\t\t},\n\t\t\t_SVGElement = _gsScope.SVGElement,\n\t\t\t_useSVGTransformAttr,\n\t\t\t//Some browsers (like Firefox and IE) don't honor transform-origin properly in SVG elements, so we need to manually adjust the matrix accordingly. We feature detect here rather than always doing the conversion for certain browsers because they may fix the problem at some point in the future.\n\n\t\t\t_createSVG = function(type, container, attributes) {\n\t\t\t\tvar element = _doc.createElementNS(\"http://www.w3.org/2000/svg\", type),\n\t\t\t\t\treg = /([a-z])([A-Z])/g,\n\t\t\t\t\tp;\n\t\t\t\tfor (p in attributes) {\n\t\t\t\t\telement.setAttributeNS(null, p.replace(reg, \"$1-$2\").toLowerCase(), attributes[p]);\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(element);\n\t\t\t\treturn element;\n\t\t\t},\n\t\t\t_docElement = _doc.documentElement || {},\n\t\t\t_forceSVGTransformAttr = (function() {\n\t\t\t\t//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the \"transform\" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element\n\t\t\t\tvar force = _ieVers || (/Android/i.test(_agent) && !_gsScope.chrome),\n\t\t\t\t\tsvg, rect, width;\n\t\t\t\tif (_doc.createElementNS && _docElement.appendChild && !force) { //IE8 and earlier doesn't support SVG anyway\n\t\t\t\t\tsvg = _createSVG(\"svg\", _docElement);\n\t\t\t\t\trect = _createSVG(\"rect\", svg, {width:100, height:50, x:100});\n\t\t\t\t\twidth = rect.getBoundingClientRect().width;\n\t\t\t\t\trect.style[_transformOriginProp] = \"50% 50%\";\n\t\t\t\t\trect.style[_transformProp] = \"scaleX(0.5)\";\n\t\t\t\t\tforce = (width === rect.getBoundingClientRect().width && !(_isFirefox && _supports3D)); //note: Firefox fails the test even though it does support CSS transforms in 3D. Since we can't push 3D stuff into the transform attribute, we force Firefox to pass the test here (as long as it does truly support 3D).\n\t\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\t}\n\t\t\t\treturn force;\n\t\t\t})(),\n\t\t\t_parseSVGOrigin = function(e, local, decoratee, absolute, smoothOrigin, skipRecord) {\n\t\t\t\tvar tm = e._gsTransform,\n\t\t\t\t\tm = _getMatrix(e, true),\n\t\t\t\t\tv, x, y, xOrigin, yOrigin, a, b, c, d, tx, ty, determinant, xOriginOld, yOriginOld;\n\t\t\t\tif (tm) {\n\t\t\t\t\txOriginOld = tm.xOrigin; //record the original values before we alter them.\n\t\t\t\t\tyOriginOld = tm.yOrigin;\n\t\t\t\t}\n\t\t\t\tif (!absolute || (v = absolute.split(\" \")).length < 2) {\n\t\t\t\t\tb = e.getBBox();\n\t\t\t\t\tif (b.x === 0 && b.y === 0 && b.width + b.height === 0) { //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\n\t\t\t\t\t\tb = {x: parseFloat(e.hasAttribute(\"x\") ? e.getAttribute(\"x\") : e.hasAttribute(\"cx\") ? e.getAttribute(\"cx\") : 0) || 0, y: parseFloat(e.hasAttribute(\"y\") ? e.getAttribute(\"y\") : e.hasAttribute(\"cy\") ? e.getAttribute(\"cy\") : 0) || 0, width:0, height:0};\n\t\t\t\t\t}\n\t\t\t\t\tlocal = _parsePosition(local).split(\" \");\n\t\t\t\t\tv = [(local[0].indexOf(\"%\") !== -1 ? parseFloat(local[0]) / 100 * b.width : parseFloat(local[0])) + b.x,\n\t\t\t\t\t\t (local[1].indexOf(\"%\") !== -1 ? parseFloat(local[1]) / 100 * b.height : parseFloat(local[1])) + b.y];\n\t\t\t\t}\n\t\t\t\tdecoratee.xOrigin = xOrigin = parseFloat(v[0]);\n\t\t\t\tdecoratee.yOrigin = yOrigin = parseFloat(v[1]);\n\t\t\t\tif (absolute && m !== _identity2DMatrix) { //if svgOrigin is being set, we must invert the matrix and determine where the absolute point is, factoring in the current transforms. Otherwise, the svgOrigin would be based on the element's non-transformed position on the canvas.\n\t\t\t\t\ta = m[0];\n\t\t\t\t\tb = m[1];\n\t\t\t\t\tc = m[2];\n\t\t\t\t\td = m[3];\n\t\t\t\t\ttx = m[4];\n\t\t\t\t\tty = m[5];\n\t\t\t\t\tdeterminant = (a * d - b * c);\n\t\t\t\t\tif (determinant) { //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\n\t\t\t\t\t\tx = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + ((c * ty - d * tx) / determinant);\n\t\t\t\t\t\ty = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - ((a * ty - b * tx) / determinant);\n\t\t\t\t\t\txOrigin = decoratee.xOrigin = v[0] = x;\n\t\t\t\t\t\tyOrigin = decoratee.yOrigin = v[1] = y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tm) { //avoid jump when transformOrigin is changed - adjust the x/y values accordingly\n\t\t\t\t\tif (skipRecord) {\n\t\t\t\t\t\tdecoratee.xOffset = tm.xOffset;\n\t\t\t\t\t\tdecoratee.yOffset = tm.yOffset;\n\t\t\t\t\t\ttm = decoratee;\n\t\t\t\t\t}\n\t\t\t\t\tif (smoothOrigin || (smoothOrigin !== false && CSSPlugin.defaultSmoothOrigin !== false)) {\n\t\t\t\t\t\tx = xOrigin - xOriginOld;\n\t\t\t\t\t\ty = yOrigin - yOriginOld;\n\t\t\t\t\t\t//originally, we simply adjusted the x and y values, but that would cause problems if, for example, you created a rotational tween part-way through an x/y tween. Managing the offset in a separate variable gives us ultimate flexibility.\n\t\t\t\t\t\t//tm.x -= x - (x * m[0] + y * m[2]);\n\t\t\t\t\t\t//tm.y -= y - (x * m[1] + y * m[3]);\n\t\t\t\t\t\ttm.xOffset += (x * m[0] + y * m[2]) - x;\n\t\t\t\t\t\ttm.yOffset += (x * m[1] + y * m[3]) - y;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttm.xOffset = tm.yOffset = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skipRecord) {\n\t\t\t\t\te.setAttribute(\"data-svg-origin\", v.join(\" \"));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_getBBoxHack = function(swapIfPossible) { //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a <defs> element and/or <mask>. We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\n\t\t\t\tvar svg = _createElement(\"svg\", (this.ownerSVGElement && this.ownerSVGElement.getAttribute(\"xmlns\")) || \"http://www.w3.org/2000/svg\"),\n\t\t\t\t\toldParent = this.parentNode,\n\t\t\t\t\toldSibling = this.nextSibling,\n\t\t\t\t\toldCSS = this.style.cssText,\n\t\t\t\t\tbbox;\n\t\t\t\t_docElement.appendChild(svg);\n\t\t\t\tsvg.appendChild(this);\n\t\t\t\tthis.style.display = \"block\";\n\t\t\t\tif (swapIfPossible) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbbox = this.getBBox();\n\t\t\t\t\t\tthis._originalGetBBox = this.getBBox;\n\t\t\t\t\t\tthis.getBBox = _getBBoxHack;\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t} else if (this._originalGetBBox) {\n\t\t\t\t\tbbox = this._originalGetBBox();\n\t\t\t\t}\n\t\t\t\tif (oldSibling) {\n\t\t\t\t\toldParent.insertBefore(this, oldSibling);\n\t\t\t\t} else {\n\t\t\t\t\toldParent.appendChild(this);\n\t\t\t\t}\n\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\tthis.style.cssText = oldCSS;\n\t\t\t\treturn bbox;\n\t\t\t},\n\t\t\t_getBBox = function(e) {\n\t\t\t\ttry {\n\t\t\t\t\treturn e.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn _getBBoxHack.call(e, true);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_isSVG = function(e) { //reports if the element is an SVG on which getBBox() actually works\n\t\t\t\treturn !!(_SVGElement && e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\n\t\t\t},\n\t\t\t_identity2DMatrix = [1,0,0,1,0,0],\n\t\t\t_getMatrix = function(e, force2D) {\n\t\t\t\tvar tm = e._gsTransform || new Transform(),\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tstyle = e.style,\n\t\t\t\t\tisDefault, s, m, n, dec, nextSibling, parent;\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t} else if (e.currentStyle) {\n\t\t\t\t\t//for older versions of IE, we need to interpret the filter portion that is in the format: progid:DXImageTransform.Microsoft.Matrix(M11=6.123233995736766e-17, M12=-1, M21=1, M22=6.123233995736766e-17, sizingMethod='auto expand') Notice that we need to swap b and c compared to a normal matrix.\n\t\t\t\t\ts = e.currentStyle.filter.match(_ieGetMatrixExp);\n\t\t\t\t\ts = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(\",\") : \"\";\n\t\t\t\t}\n\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\tif (_transformProp && isDefault && !e.offsetParent && e !== _docElement) { //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n\t\t\t\t\t//browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\n\t\t\t\t\tn = style.display;\n\t\t\t\t\tstyle.display = \"block\";\n\t\t\t\t\tparent = e.parentNode;\n\t\t\t\t\tif (!parent || !e.offsetParent) {\n\t\t\t\t\t\tdec = 1; //flag\n\t\t\t\t\t\tnextSibling = e.nextSibling;\n\t\t\t\t\t\t_docElement.appendChild(e); //we must add it to the DOM in order to get values properly\n\t\t\t\t\t}\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\tisDefault = (!s || s === \"none\" || s === \"matrix(1, 0, 0, 1, 0, 0)\");\n\t\t\t\t\tif (n) {\n\t\t\t\t\t\tstyle.display = n;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_removeProp(style, \"display\");\n\t\t\t\t\t}\n\t\t\t\t\tif (dec) {\n\t\t\t\t\t\tif (nextSibling) {\n\t\t\t\t\t\t\tparent.insertBefore(e, nextSibling);\n\t\t\t\t\t\t} else if (parent) {\n\t\t\t\t\t\t\tparent.appendChild(e);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_docElement.removeChild(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tm.svg || (e.getCTM && _isSVG(e))) {\n\t\t\t\t\tif (isDefault && (style[_transformProp] + \"\").indexOf(\"matrix\") !== -1) { //some browsers (like Chrome 40) don't correctly report transforms that are applied inline on an SVG element (they don't get included in the computed style), so we double-check here and accept matrix values\n\t\t\t\t\t\ts = style[_transformProp];\n\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t}\n\t\t\t\t\tm = e.getAttribute(\"transform\");\n\t\t\t\t\tif (isDefault && m) {\n\t\t\t\t\t\tm = e.transform.baseVal.consolidate().matrix; //ensures that even complex values like \"translate(50,60) rotate(135,0,0)\" are parsed because it mashes it into a matrix.\n\t\t\t\t\t\ts = \"matrix(\" + m.a + \",\" + m.b + \",\" + m.c + \",\" + m.d + \",\" + m.e + \",\" + m.f + \")\";\n\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isDefault) {\n\t\t\t\t\treturn _identity2DMatrix;\n\t\t\t\t}\n\t\t\t\t//split the matrix values out into an array (m for matrix)\n\t\t\t\tm = (s || \"\").match(_numExp) || [];\n\t\t\t\ti = m.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tn = Number(m[i]);\n\t\t\t\t\tm[i] = (dec = n - (n |= 0)) ? ((dec * rnd + (dec < 0 ? -0.5 : 0.5)) | 0) / rnd + n : n; //convert strings to Numbers and round to 5 decimal places to avoid issues with tiny numbers. Roughly 20x faster than Number.toFixed(). We also must make sure to round before dividing so that values like 0.9999999999 become 1 to avoid glitches in browser rendering and interpretation of flipped/rotated 3D matrices. And don't just multiply the number by rnd, floor it, and then divide by rnd because the bitwise operations max out at a 32-bit signed integer, thus it could get clipped at a relatively low value (like 22,000.00000 for example).\n\t\t\t\t}\n\t\t\t\treturn (force2D && m.length > 6) ? [m[0], m[1], m[4], m[5], m[12], m[13]] : m;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Parses the transform values for an element, returning an object with x, y, z, scaleX, scaleY, scaleZ, rotation, rotationX, rotationY, skewX, and skewY properties. Note: by default (for performance reasons), all skewing is combined into skewX and rotation but skewY still has a place in the transform object so that we can record how much of the skew is attributed to skewX vs skewY. Remember, a skewY of 10 looks the same as a rotation of 10 and skewX of -10.\n\t\t\t * @param {!Object} t target element\n\t\t\t * @param {Object=} cs computed style object (optional)\n\t\t\t * @param {boolean=} rec if true, the transform values will be recorded to the target element's _gsTransform object, like target._gsTransform = {x:0, y:0, z:0, scaleX:1...}\n\t\t\t * @param {boolean=} parse if true, we'll ignore any _gsTransform values that already exist on the element, and force a reparsing of the css (calculated style)\n\t\t\t * @return {object} object containing all of the transform properties/values like {x:0, y:0, z:0, scaleX:1...}\n\t\t\t */\n\t\t\t_getTransform = _internals.getTransform = function(t, cs, rec, parse) {\n\t\t\t\tif (t._gsTransform && rec && !parse) {\n\t\t\t\t\treturn t._gsTransform; //if the element already has a _gsTransform, use that. Note: some browsers don't accurately return the calculated style for the transform (particularly for SVG), so it's almost always safest to just use the values we've already applied rather than re-parsing things.\n\t\t\t\t}\n\t\t\t\tvar tm = rec ? t._gsTransform || new Transform() : new Transform(),\n\t\t\t\t\tinvX = (tm.scaleX < 0), //in order to interpret things properly, we need to know if the user applied a negative scaleX previously so that we can adjust the rotation and skewX accordingly. Otherwise, if we always interpret a flipped matrix as affecting scaleY and the user only wants to tween the scaleX on multiple sequential tweens, it would keep the negative scaleY without that being the user's intent.\n\t\t\t\t\tmin = 0.00002,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tzOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, \"0 0 0\").split(\" \")[2]) || tm.zOrigin  || 0 : 0,\n\t\t\t\t\tdefaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,\n\t\t\t\t\tm, i, scaleX, scaleY, rotation, skewX;\n\n\t\t\t\ttm.svg = !!(t.getCTM && _isSVG(t));\n\t\t\t\tif (tm.svg) {\n\t\t\t\t\t_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, cs, false, \"50% 50%\") + \"\", tm, t.getAttribute(\"data-svg-origin\"));\n\t\t\t\t\t_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;\n\t\t\t\t}\n\t\t\t\tm = _getMatrix(t);\n\t\t\t\tif (m !== _identity2DMatrix) {\n\n\t\t\t\t\tif (m.length === 16) {\n\t\t\t\t\t\t//we'll only look at these position-related 6 variables first because if x/y/z all match, it's relatively safe to assume we don't need to re-parse everything which risks losing important rotational information (like rotationX:180 plus rotationY:180 would look the same as rotation:180 - there's no way to know for sure which direction was taken based solely on the matrix3d() values)\n\t\t\t\t\t\tvar a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],\n\t\t\t\t\t\t\ta12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],\n\t\t\t\t\t\t\ta13 = m[8], a23 = m[9], a33 = m[10],\n\t\t\t\t\t\t\ta14 = m[12], a24 = m[13], a34 = m[14],\n\t\t\t\t\t\t\ta43 = m[11],\n\t\t\t\t\t\t\tangle = Math.atan2(a32, a33),\n\t\t\t\t\t\t\tt1, t2, t3, t4, cos, sin;\n\t\t\t\t\t\t//we manually compensate for non-zero z component of transformOrigin to work around bugs in Safari\n\t\t\t\t\t\tif (tm.zOrigin) {\n\t\t\t\t\t\t\ta34 = -tm.zOrigin;\n\t\t\t\t\t\t\ta14 = a13*a34-m[12];\n\t\t\t\t\t\t\ta24 = a23*a34-m[13];\n\t\t\t\t\t\t\ta34 = a33*a34+tm.zOrigin-m[14];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//note for possible future consolidation: rotationX: Math.atan2(a32, a33), rotationY: Math.atan2(-a31, Math.sqrt(a33 * a33 + a32 * a32)), rotation: Math.atan2(a21, a11), skew: Math.atan2(a12, a22). However, it doesn't seem to be quite as reliable as the full-on backwards rotation procedure.\n\t\t\t\t\t\ttm.rotationX = angle * _RAD2DEG;\n\t\t\t\t\t\t//rotationX\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\t\tt3 = a32*cos+a33*sin;\n\t\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a32*-sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a42*-sin+a43*cos;\n\t\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t\t\ta32 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationY\n\t\t\t\t\t\tangle = Math.atan2(-a31, a33);\n\t\t\t\t\t\ttm.rotationY = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a11*cos-a13*sin;\n\t\t\t\t\t\t\tt2 = a21*cos-a23*sin;\n\t\t\t\t\t\t\tt3 = a31*cos-a33*sin;\n\t\t\t\t\t\t\ta23 = a21*sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a31*sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a41*sin+a43*cos;\n\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\ta31 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationZ\n\t\t\t\t\t\tangle = Math.atan2(a21, a11);\n\t\t\t\t\t\ttm.rotation = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\t\tt1 = a11*cos+a21*sin;\n\t\t\t\t\t\t\tt2 = a12*cos+a22*sin;\n\t\t\t\t\t\t\tt3 = a13*cos+a23*sin;\n\t\t\t\t\t\t\ta21 = a21*cos-a11*sin;\n\t\t\t\t\t\t\ta22 = a22*cos-a12*sin;\n\t\t\t\t\t\t\ta23 = a23*cos-a13*sin;\n\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\ta12 = t2;\n\t\t\t\t\t\t\ta13 = t3;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tm.rotationX && Math.abs(tm.rotationX) + Math.abs(tm.rotation) > 359.9) { //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n\t\t\t\t\t\t\ttm.rotationX = tm.rotation = 0;\n\t\t\t\t\t\t\ttm.rotationY = 180 - tm.rotationY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//skewX\n\t\t\t\t\t\tangle = Math.atan2(a12, a22);\n\n\t\t\t\t\t\t//scales\n\t\t\t\t\t\ttm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21 + a31 * a31) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleY = ((Math.sqrt(a22 * a22 + a32 * a32) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleZ = ((Math.sqrt(a13 * a13 + a23 * a23 + a33 * a33) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ta11 /= tm.scaleX;\n\t\t\t\t\t\ta12 /= tm.scaleY;\n\t\t\t\t\t\ta21 /= tm.scaleX;\n\t\t\t\t\t\ta22 /= tm.scaleY;\n\t\t\t\t\t\tif (Math.abs(angle) > min) {\n\t\t\t\t\t\t\ttm.skewX = angle * _RAD2DEG;\n\t\t\t\t\t\t\ta12 = 0; //unskews\n\t\t\t\t\t\t\tif (tm.skewType !== \"simple\") {\n\t\t\t\t\t\t\t\ttm.scaleY *= 1 / Math.cos(angle); //by default, we compensate the scale based on the skew so that the element maintains a similar proportion when skewed, so we have to alter the scaleY here accordingly to match the default (non-adjusted) skewing that CSS does (stretching more and more as it skews).\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.skewX = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* //for testing purposes\n\t\t\t\t\t\tvar transform = \"matrix3d(\",\n\t\t\t\t\t\t\tcomma = \",\",\n\t\t\t\t\t\t\tzero = \"0\";\n\t\t\t\t\t\ta13 /= tm.scaleZ;\n\t\t\t\t\t\ta23 /= tm.scaleZ;\n\t\t\t\t\t\ta31 /= tm.scaleX;\n\t\t\t\t\t\ta32 /= tm.scaleY;\n\t\t\t\t\t\ta33 /= tm.scaleZ;\n\t\t\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t\t\ttransform += a14 + comma + a24 + comma + a34 + comma + (tm.perspective ? (1 + (-a34 / tm.perspective)) : 1) + \")\";\n\t\t\t\t\t\tconsole.log(transform);\n\t\t\t\t\t\tdocument.querySelector(\".test\").style[_transformProp] = transform;\n\t\t\t\t\t\t*/\n\n\t\t\t\t\t\ttm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;\n\t\t\t\t\t\ttm.x = a14;\n\t\t\t\t\t\ttm.y = a24;\n\t\t\t\t\t\ttm.z = a34;\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a11 - tm.yOrigin * a12);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.yOrigin * a21 - tm.xOrigin * a22);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY))) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's \"display\" is \"none\", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.\n\t\t\t\t\t\tvar k = (m.length >= 6),\n\t\t\t\t\t\t\ta = k ? m[0] : 1,\n\t\t\t\t\t\t\tb = m[1] || 0,\n\t\t\t\t\t\t\tc = m[2] || 0,\n\t\t\t\t\t\t\td = k ? m[3] : 1;\n\t\t\t\t\t\ttm.x = m[4] || 0;\n\t\t\t\t\t\ttm.y = m[5] || 0;\n\t\t\t\t\t\tscaleX = Math.sqrt(a * a + b * b);\n\t\t\t\t\t\tscaleY = Math.sqrt(d * d + c * c);\n\t\t\t\t\t\trotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\t\t\t\t\t\tskewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;\n\t\t\t\t\t\ttm.scaleX = scaleX;\n\t\t\t\t\t\ttm.scaleY = scaleY;\n\t\t\t\t\t\ttm.rotation = rotation;\n\t\t\t\t\t\ttm.skewX = skewX;\n\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\ttm.rotationX = tm.rotationY = tm.z = 0;\n\t\t\t\t\t\t\ttm.perspective = defaultTransformPerspective;\n\t\t\t\t\t\t\ttm.scaleZ = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a + tm.yOrigin * c);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.xOrigin * b + tm.yOrigin * d);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (Math.abs(tm.skewX) > 90 && Math.abs(tm.skewX) < 270) {\n\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\ttm.scaleX *= -1;\n\t\t\t\t\t\t\ttm.skewX += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\ttm.rotation += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.scaleY *= -1;\n\t\t\t\t\t\t\ttm.skewX += (tm.skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttm.zOrigin = zOrigin;\n\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.\n\t\t\t\t\tfor (i in tm) {\n\t\t\t\t\t\tif (tm[i] < min) if (tm[i] > -min) {\n\t\t\t\t\t\t\ttm[i] = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//DEBUG: _log(\"parsed rotation of \" + t.getAttribute(\"id\")+\": \"+(tm.rotationX)+\", \"+(tm.rotationY)+\", \"+(tm.rotation)+\", scale: \"+tm.scaleX+\", \"+tm.scaleY+\", \"+tm.scaleZ+\", position: \"+tm.x+\", \"+tm.y+\", \"+tm.z+\", perspective: \"+tm.perspective+ \", origin: \"+ tm.xOrigin+ \",\"+ tm.yOrigin);\n\t\t\t\tif (rec) {\n\t\t\t\t\tt._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)\n\t\t\t\t\tif (tm.svg) { //if we're supposed to apply transforms to the SVG element's \"transform\" attribute, make sure there aren't any CSS transforms applied or they'll override the attribute ones. Also clear the transform attribute if we're using CSS, just to be clean.\n\t\t\t\t\t\tif (_useSVGTransformAttr && t.style[_transformProp]) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){ //if we apply this right away (before anything has rendered), we risk there being no transforms for a brief moment and it also interferes with adjusting the transformOrigin in a tween with immediateRender:true (it'd try reading the matrix and it wouldn't have the appropriate data in place because we just removed it).\n\t\t\t\t\t\t\t\t_removeProp(t.style, _transformProp);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (!_useSVGTransformAttr && t.getAttribute(\"transform\")) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){\n\t\t\t\t\t\t\t\tt.removeAttribute(\"transform\");\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn tm;\n\t\t\t},\n\n\t\t\t//for setting 2D transforms in IE6, IE7, and IE8 (must use a \"filter\" to emulate the behavior of modern day browser transforms)\n\t\t\t_setIETransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tang = -t.rotation * _DEG2RAD,\n\t\t\t\t\tskew = ang + t.skewX * _DEG2RAD,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\ta = ((Math.cos(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tb = ((Math.sin(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tc = ((Math.sin(skew) * -t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\td = ((Math.cos(skew) * t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tcs = this.t.currentStyle,\n\t\t\t\t\tfilters, val;\n\t\t\t\tif (!cs) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tval = b; //just for swapping the variables an inverting them (reused \"val\" to avoid creating another variable in memory). IE's filter matrix uses a non-standard matrix configuration (angle goes the opposite way, and b and c are reversed and inverted)\n\t\t\t\tb = -c;\n\t\t\t\tc = -val;\n\t\t\t\tfilters = cs.filter;\n\t\t\t\tstyle.filter = \"\"; //remove filters so that we can accurately measure offsetWidth/offsetHeight\n\t\t\t\tvar w = this.t.offsetWidth,\n\t\t\t\t\th = this.t.offsetHeight,\n\t\t\t\t\tclip = (cs.position !== \"absolute\"),\n\t\t\t\t\tm = \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + a + \", M12=\" + b + \", M21=\" + c + \", M22=\" + d,\n\t\t\t\t\tox = t.x + (w * t.xPercent / 100),\n\t\t\t\t\toy = t.y + (h * t.yPercent / 100),\n\t\t\t\t\tdx, dy;\n\n\t\t\t\t//if transformOrigin is being used, adjust the offset x and y\n\t\t\t\tif (t.ox != null) {\n\t\t\t\t\tdx = ((t.oxp) ? w * t.ox * 0.01 : t.ox) - w / 2;\n\t\t\t\t\tdy = ((t.oyp) ? h * t.oy * 0.01 : t.oy) - h / 2;\n\t\t\t\t\tox += dx - (dx * a + dy * b);\n\t\t\t\t\toy += dy - (dx * c + dy * d);\n\t\t\t\t}\n\n\t\t\t\tif (!clip) {\n\t\t\t\t\tm += \", sizingMethod='auto expand')\";\n\t\t\t\t} else {\n\t\t\t\t\tdx = (w / 2);\n\t\t\t\t\tdy = (h / 2);\n\t\t\t\t\t//translate to ensure that transformations occur around the correct origin (default is center).\n\t\t\t\t\tm += \", Dx=\" + (dx - (dx * a + dy * b) + ox) + \", Dy=\" + (dy - (dx * c + dy * d) + oy) + \")\";\n\t\t\t\t}\n\t\t\t\tif (filters.indexOf(\"DXImageTransform.Microsoft.Matrix(\") !== -1) {\n\t\t\t\t\tstyle.filter = filters.replace(_ieSetMatrixExp, m);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.filter = m + \" \" + filters; //we must always put the transform/matrix FIRST (before alpha(opacity=xx)) to avoid an IE bug that slices part of the object when rotation is applied with alpha.\n\t\t\t\t}\n\n\t\t\t\t//at the end or beginning of the tween, if the matrix is normal (1, 0, 0, 1) and opacity is 100 (or doesn't exist), remove the filter to improve browser performance.\n\t\t\t\tif (v === 0 || v === 1) if (a === 1) if (b === 0) if (c === 0) if (d === 1) if (!clip || m.indexOf(\"Dx=0, Dy=0\") !== -1) if (!_opacityExp.test(filters) || parseFloat(RegExp.$1) === 100) if (filters.indexOf(\"gradient(\" && filters.indexOf(\"Alpha\")) === -1) {\n\t\t\t\t\tstyle.removeAttribute(\"filter\");\n\t\t\t\t}\n\n\t\t\t\t//we must set the margins AFTER applying the filter in order to avoid some bugs in IE8 that could (in rare scenarios) cause them to be ignored intermittently (vibration).\n\t\t\t\tif (!clip) {\n\t\t\t\t\tvar mult = (_ieVers < 8) ? 1 : -1, //in Internet Explorer 7 and before, the box model is broken, causing the browser to treat the width/height of the actual rotated filtered image as the width/height of the box itself, but Microsoft corrected that in IE8. We must use a negative offset in IE8 on the right/bottom\n\t\t\t\t\t\tmarg, prop, dif;\n\t\t\t\t\tdx = t.ieOffsetX || 0;\n\t\t\t\t\tdy = t.ieOffsetY || 0;\n\t\t\t\t\tt.ieOffsetX = Math.round((w - ((a < 0 ? -a : a) * w + (b < 0 ? -b : b) * h)) / 2 + ox);\n\t\t\t\t\tt.ieOffsetY = Math.round((h - ((d < 0 ? -d : d) * h + (c < 0 ? -c : c) * w)) / 2 + oy);\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tprop = _margins[i];\n\t\t\t\t\t\tmarg = cs[prop];\n\t\t\t\t\t\t//we need to get the current margin in case it is being tweened separately (we want to respect that tween's changes)\n\t\t\t\t\t\tval = (marg.indexOf(\"px\") !== -1) ? parseFloat(marg) : _convertToPixels(this.t, prop, parseFloat(marg), marg.replace(_suffixExp, \"\")) || 0;\n\t\t\t\t\t\tif (val !== t[prop]) {\n\t\t\t\t\t\t\tdif = (i < 2) ? -t.ieOffsetX : -t.ieOffsetY; //if another tween is controlling a margin, we cannot only apply the difference in the ieOffsets, so we essentially zero-out the dx and dy here in that case. We record the margin(s) later so that we can keep comparing them, making this code very flexible.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdif = (i < 2) ? dx - t.ieOffsetX : dy - t.ieOffsetY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[prop] = (t[prop] = Math.round( val - dif * ((i === 0 || i === 2) ? 1 : mult) )) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/* translates a super small decimal to a string WITHOUT scientific notation\n\t\t\t_safeDecimal = function(n) {\n\t\t\t\tvar s = (n < 0 ? -n : n) + \"\",\n\t\t\t\t\ta = s.split(\"e-\");\n\t\t\t\treturn (n < 0 ? \"-0.\" : \"0.\") + new Array(parseInt(a[1], 10) || 0).join(\"0\") + a[0].split(\".\").join(\"\");\n\t\t\t},\n\t\t\t*/\n\n\t\t\t_setTransformRatio = _internals.set3DTransformRatio = _internals.setTransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tangle = t.rotation,\n\t\t\t\t\trotationX = t.rotationX,\n\t\t\t\t\trotationY = t.rotationY,\n\t\t\t\t\tsx = t.scaleX,\n\t\t\t\t\tsy = t.scaleY,\n\t\t\t\t\tsz = t.scaleZ,\n\t\t\t\t\tx = t.x,\n\t\t\t\t\ty = t.y,\n\t\t\t\t\tz = t.z,\n\t\t\t\t\tisSVG = t.svg,\n\t\t\t\t\tperspective = t.perspective,\n\t\t\t\t\tforce3D = t.force3D,\n\t\t\t\t\tskewY = t.skewY,\n\t\t\t\t\tskewX = t.skewX,\n\t\t\t\t\tt1,\ta11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43,\n\t\t\t\t\tzOrigin, min, cos, sin, t2, transform, comma, zero, skew, rnd;\n\t\t\t\tif (skewY) { //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\n\t\t\t\t\tskewX += skewY;\n\t\t\t\t\tangle += skewY;\n\t\t\t\t}\n\n\t\t\t\t//check to see if we should render as 2D (and SVGs must use 2D when _useSVGTransformAttr is true)\n\t\t\t\tif (((((v === 1 || v === 0) && force3D === \"auto\" && (this.tween._totalTime === this.tween._totalDuration || !this.tween._totalTime)) || !force3D) && !z && !perspective && !rotationY && !rotationX && sz === 1) || (_useSVGTransformAttr && isSVG) || !_supports3D) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices. Check the tween's totalTime/totalDuration too in order to make sure it doesn't happen between repeats if it's a repeating tween.\n\n\t\t\t\t\t//2D\n\t\t\t\t\tif (angle || skewX || isSVG) {\n\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\tskew = skewX * _DEG2RAD;\n\t\t\t\t\t\trnd = 100000;\n\t\t\t\t\t\ta11 = Math.cos(angle) * sx;\n\t\t\t\t\t\ta21 = Math.sin(angle) * sx;\n\t\t\t\t\t\ta12 = Math.sin(angle - skew) * -sy;\n\t\t\t\t\t\ta22 = Math.cos(angle - skew) * sy;\n\t\t\t\t\t\tif (skew && t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan(skew - skewY * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\ta12 *= t1;\n\t\t\t\t\t\t\ta22 *= t1;\n\t\t\t\t\t\t\tif (skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isSVG) {\n\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t\tif (_useSVGTransformAttr && (t.xPercent || t.yPercent)) { //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the matrix to simulate it.\n\t\t\t\t\t\t\t\tmin = this.t.getBBox();\n\t\t\t\t\t\t\t\tx += t.xPercent * 0.01 * min.width;\n\t\t\t\t\t\t\t\ty += t.yPercent * 0.01 * min.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmin = 0.000001;\n\t\t\t\t\t\t\tif (x < min) if (x > -min) {\n\t\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (y < min) if (y > -min) {\n\t\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransform = (((a11 * rnd) | 0) / rnd) + \",\" + (((a21 * rnd) | 0) / rnd) + \",\" + (((a12 * rnd) | 0) / rnd) + \",\" + (((a22 * rnd) | 0) / rnd) + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t\tif (isSVG && _useSVGTransformAttr) {\n\t\t\t\t\t\t\tthis.t.setAttribute(\"transform\", \"matrix(\" + transform);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \"e-\" towards the end) and would render the object slightly off. So we round to 5 decimal places.\n\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + transform;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix(\" : \"matrix(\") + sx + \",0,0,\" + sy + \",\" + x + \",\" + y + \")\";\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\t\t\t\tif (_isFirefox) { //Firefox has a bug (at least in v25) that causes it to render the transparent part of 32-bit PNG images as black when displayed inside an iframe and the 3D scale is very small and doesn't change sufficiently enough between renders (like if you use a Power4.easeInOut to scale from 0 to 1 where the beginning values only change a tiny amount to begin the tween before accelerating). In this case, we force the scale to be 0.00002 instead which is visually the same but works around the Firefox issue.\n\t\t\t\t\tmin = 0.0001;\n\t\t\t\t\tif (sx < min && sx > -min) {\n\t\t\t\t\t\tsx = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (sy < min && sy > -min) {\n\t\t\t\t\t\tsy = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (perspective && !t.z && !t.rotationX && !t.rotationY) { //Firefox has a bug that causes elements to have an odd super-thin, broken/dotted black border on elements that have a perspective set but aren't utilizing 3D space (no rotationX, rotationY, or z).\n\t\t\t\t\t\tperspective = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (angle || skewX) {\n\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\tcos = a11 = Math.cos(angle);\n\t\t\t\t\tsin = a21 = Math.sin(angle);\n\t\t\t\t\tif (skewX) {\n\t\t\t\t\t\tangle -= skewX * _DEG2RAD;\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\tif (t.skewType === \"simple\") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \"simple\" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan((skewX - skewY) * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\tcos *= t1;\n\t\t\t\t\t\t\tsin *= t1;\n\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta12 = -sin;\n\t\t\t\t\ta22 = cos;\n\n\t\t\t\t} else if (!rotationY && !rotationX && sz === 1 && !perspective && !isSVG) { //if we're only translating and/or 2D scaling, this is faster...\n\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) translate3d(\" : \"translate3d(\") + x + \"px,\" + y + \"px,\" + z +\"px)\" + ((sx !== 1 || sy !== 1) ? \" scale(\" + sx + \",\" + sy + \")\" : \"\");\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\ta11 = a22 = 1;\n\t\t\t\t\ta12 = a21 = 0;\n\t\t\t\t}\n\t\t\t\t// KEY  INDEX   AFFECTS a[row][column]\n\t\t\t\t// a11  0       rotation, rotationY, scaleX\n\t\t\t\t// a21  1       rotation, rotationY, scaleX\n\t\t\t\t// a31  2       rotationY, scaleX\n\t\t\t\t// a41  3       rotationY, scaleX\n\t\t\t\t// a12  4       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a22  5       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a32  6       rotationX, scaleY\n\t\t\t\t// a42  7       rotationX, scaleY\n\t\t\t\t// a13  8       rotationY, rotationX, scaleZ\n\t\t\t\t// a23  9       rotationY, rotationX, scaleZ\n\t\t\t\t// a33  10      rotationY, rotationX, scaleZ\n\t\t\t\t// a43  11      rotationY, rotationX, perspective, scaleZ\n\t\t\t\t// a14  12      x, zOrigin, svgOrigin\n\t\t\t\t// a24  13      y, zOrigin, svgOrigin\n\t\t\t\t// a34  14      z, zOrigin\n\t\t\t\t// a44  15\n\t\t\t\t// rotation: Math.atan2(a21, a11)\n\t\t\t\t// rotationY: Math.atan2(a13, a33) (or Math.atan2(a13, a11))\n\t\t\t\t// rotationX: Math.atan2(a32, a33)\n\t\t\t\ta33 = 1;\n\t\t\t\ta13 = a23 = a31 = a32 = a41 = a42 = 0;\n\t\t\t\ta43 = (perspective) ? -1 / perspective : 0;\n\t\t\t\tzOrigin = t.zOrigin;\n\t\t\t\tmin = 0.000001; //threshold below which browsers use scientific notation which won't work.\n\t\t\t\tcomma = \",\";\n\t\t\t\tzero = \"0\";\n\t\t\t\tangle = rotationY * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\ta31 = -sin;\n\t\t\t\t\ta41 = a43*-sin;\n\t\t\t\t\ta13 = a11*sin;\n\t\t\t\t\ta23 = a21*sin;\n\t\t\t\t\ta33 = cos;\n\t\t\t\t\ta43 *= cos;\n\t\t\t\t\ta11 *= cos;\n\t\t\t\t\ta21 *= cos;\n\t\t\t\t}\n\t\t\t\tangle = rotationX * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\ta32 = a33*sin;\n\t\t\t\t\ta42 = a43*sin;\n\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\ta33 = a33*cos;\n\t\t\t\t\ta43 = a43*cos;\n\t\t\t\t\ta12 = t1;\n\t\t\t\t\ta22 = t2;\n\t\t\t\t}\n\t\t\t\tif (sz !== 1) {\n\t\t\t\t\ta13*=sz;\n\t\t\t\t\ta23*=sz;\n\t\t\t\t\ta33*=sz;\n\t\t\t\t\ta43*=sz;\n\t\t\t\t}\n\t\t\t\tif (sy !== 1) {\n\t\t\t\t\ta12*=sy;\n\t\t\t\t\ta22*=sy;\n\t\t\t\t\ta32*=sy;\n\t\t\t\t\ta42*=sy;\n\t\t\t\t}\n\t\t\t\tif (sx !== 1) {\n\t\t\t\t\ta11*=sx;\n\t\t\t\t\ta21*=sx;\n\t\t\t\t\ta31*=sx;\n\t\t\t\t\ta41*=sx;\n\t\t\t\t}\n\n\t\t\t\tif (zOrigin || isSVG) {\n\t\t\t\t\tif (zOrigin) {\n\t\t\t\t\t\tx += a13*-zOrigin;\n\t\t\t\t\t\ty += a23*-zOrigin;\n\t\t\t\t\t\tz += a33*-zOrigin+zOrigin;\n\t\t\t\t\t}\n\t\t\t\t\tif (isSVG) { //due to bugs in some browsers, we need to manage the transform-origin of SVG manually\n\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < min && x > -min) {\n\t\t\t\t\t\tx = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (y < min && y > -min) {\n\t\t\t\t\t\ty = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (z < min && z > -min) {\n\t\t\t\t\t\tz = 0; //don't use string because we calculate perspective later and need the number.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:\n\t\t\t\ttransform = ((t.xPercent || t.yPercent) ? \"translate(\" + t.xPercent + \"%,\" + t.yPercent + \"%) matrix3d(\" : \"matrix3d(\");\n\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\tif (rotationX || rotationY || sz !== 1) { //performance optimization (often there's no rotationX or rotationY, so we can skip these calculations)\n\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t} else {\n\t\t\t\t\ttransform += \",0,0,0,0,1,0,\";\n\t\t\t\t}\n\t\t\t\ttransform += x + comma + y + comma + z + comma + (perspective ? (1 + (-z / perspective)) : 1) + \")\";\n\n\t\t\t\tstyle[_transformProp] = transform;\n\t\t\t};\n\n\t\tp = Transform.prototype;\n\t\tp.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = p.xOffset = p.yOffset = 0;\n\t\tp.scaleX = p.scaleY = p.scaleZ = 1;\n\n\t\t_registerComplexSpecialProp(\"transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\", {parser:function(t, e, parsingProp, cssp, pt, plugin, vars) {\n\t\t\tif (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.\n\t\t\tcssp._lastParsedTransform = vars;\n\t\t\tvar scaleFunc = (vars.scale && typeof(vars.scale) === \"function\") ? vars.scale : 0; //if there's a function-based \"scale\" value, swap in the resulting numeric value temporarily. Otherwise, if it's called for both scaleX and scaleY independently, they may not match (like if the function uses Math.random()).\n\t\t\tif (scaleFunc) {\n\t\t\t\tvars.scale = scaleFunc(_index, t);\n\t\t\t}\n\t\t\tvar originalGSTransform = t._gsTransform,\n\t\t\t\tstyle = t.style,\n\t\t\t\tmin = 0.000001,\n\t\t\t\ti = _transformProps.length,\n\t\t\t\tv = vars,\n\t\t\t\tendRotations = {},\n\t\t\t\ttransformOriginString = \"transformOrigin\",\n\t\t\t\tm1 = _getTransform(t, _cs, true, v.parseTransform),\n\t\t\t\torig = v.transform && ((typeof(v.transform) === \"function\") ? v.transform(_index, _target) : v.transform),\n\t\t\t\tm2, copy, has3D, hasChange, dr, x, y, matrix, p;\n\t\t\tm1.skewType = v.skewType || m1.skewType || CSSPlugin.defaultSkewType;\n\t\t\tcssp._transform = m1;\n\t\t\tif (\"rotationZ\" in v) {\n\t\t\t\tv.rotation = v.rotationZ;\n\t\t\t}\n\t\t\tif (orig && typeof(orig) === \"string\" && _transformProp) { //for values like transform:\"rotate(60deg) scale(0.5, 0.8)\"\n\t\t\t\tcopy = _tempDiv.style; //don't use the original target because it might be SVG in which case some browsers don't report computed style correctly.\n\t\t\t\tcopy[_transformProp] = orig;\n\t\t\t\tcopy.display = \"block\"; //if display is \"none\", the browser often refuses to report the transform properties correctly.\n\t\t\t\tcopy.position = \"absolute\";\n\t\t\t\tif (orig.indexOf(\"%\") !== -1) { //%-based translations will fail unless we set the width/height to match the original target...\n\t\t\t\t\tcopy.width = _getStyle(t, \"width\");\n\t\t\t\t\tcopy.height = _getStyle(t, \"height\");\n\t\t\t\t}\n\t\t\t\t_doc.body.appendChild(_tempDiv);\n\t\t\t\tm2 = _getTransform(_tempDiv, null, false);\n\t\t\t\tif (m1.skewType === \"simple\") { //the default _getTransform() reports the skewX/scaleY as if skewType is \"compensated\", thus we need to adjust that here if skewType is \"simple\".\n\t\t\t\t\tm2.scaleY *= Math.cos(m2.skewX * _DEG2RAD);\n\t\t\t\t}\n\t\t\t\tif (m1.svg) { //if it's an SVG element, x/y part of the matrix will be affected by whatever we use as the origin and the offsets, so compensate here...\n\t\t\t\t\tx = m1.xOrigin;\n\t\t\t\t\ty = m1.yOrigin;\n\t\t\t\t\tm2.x -= m1.xOffset;\n\t\t\t\t\tm2.y -= m1.yOffset;\n\t\t\t\t\tif (v.transformOrigin || v.svgOrigin) { //if this tween is altering the origin, we must factor that in here. The actual work of recording the transformOrigin values and setting up the PropTween is done later (still inside this function) so we cannot leave the changes intact here - we only want to update the x/y accordingly.\n\t\t\t\t\t\torig = {};\n\t\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(v.transformOrigin), orig, v.svgOrigin, v.smoothOrigin, true);\n\t\t\t\t\t\tx = orig.xOrigin;\n\t\t\t\t\t\ty = orig.yOrigin;\n\t\t\t\t\t\tm2.x -= orig.xOffset - m1.xOffset;\n\t\t\t\t\t\tm2.y -= orig.yOffset - m1.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\tmatrix = _getMatrix(_tempDiv, true);\n\t\t\t\t\t\tm2.x -= x - (x * matrix[0] + y * matrix[2]);\n\t\t\t\t\t\tm2.y -= y - (x * matrix[1] + y * matrix[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_doc.body.removeChild(_tempDiv);\n\t\t\t\tif (!m2.perspective) {\n\t\t\t\t\tm2.perspective = m1.perspective; //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n\t\t\t\t}\n\t\t\t\tif (v.xPercent != null) {\n\t\t\t\t\tm2.xPercent = _parseVal(v.xPercent, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (v.yPercent != null) {\n\t\t\t\t\tm2.yPercent = _parseVal(v.yPercent, m1.yPercent);\n\t\t\t\t}\n\t\t\t} else if (typeof(v) === \"object\") { //for values like scaleX, scaleY, rotation, x, y, skewX, and skewY or transform:{...} (object)\n\t\t\t\tm2 = {scaleX:_parseVal((v.scaleX != null) ? v.scaleX : v.scale, m1.scaleX),\n\t\t\t\t\tscaleY:_parseVal((v.scaleY != null) ? v.scaleY : v.scale, m1.scaleY),\n\t\t\t\t\tscaleZ:_parseVal(v.scaleZ, m1.scaleZ),\n\t\t\t\t\tx:_parseVal(v.x, m1.x),\n\t\t\t\t\ty:_parseVal(v.y, m1.y),\n\t\t\t\t\tz:_parseVal(v.z, m1.z),\n\t\t\t\t\txPercent:_parseVal(v.xPercent, m1.xPercent),\n\t\t\t\t\tyPercent:_parseVal(v.yPercent, m1.yPercent),\n\t\t\t\t\tperspective:_parseVal(v.transformPerspective, m1.perspective)};\n\t\t\t\tdr = v.directionalRotation;\n\t\t\t\tif (dr != null) {\n\t\t\t\t\tif (typeof(dr) === \"object\") {\n\t\t\t\t\t\tfor (copy in dr) {\n\t\t\t\t\t\t\tv[copy] = dr[copy];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv.rotation = dr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof(v.x) === \"string\" && v.x.indexOf(\"%\") !== -1) {\n\t\t\t\t\tm2.x = 0;\n\t\t\t\t\tm2.xPercent = _parseVal(v.x, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (typeof(v.y) === \"string\" && v.y.indexOf(\"%\") !== -1) {\n\t\t\t\t\tm2.y = 0;\n\t\t\t\t\tm2.yPercent = _parseVal(v.y, m1.yPercent);\n\t\t\t\t}\n\n\t\t\t\tm2.rotation = _parseAngle((\"rotation\" in v) ? v.rotation : (\"shortRotation\" in v) ? v.shortRotation + \"_short\" : m1.rotation, m1.rotation, \"rotation\", endRotations);\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\tm2.rotationX = _parseAngle((\"rotationX\" in v) ? v.rotationX : (\"shortRotationX\" in v) ? v.shortRotationX + \"_short\" : m1.rotationX || 0, m1.rotationX, \"rotationX\", endRotations);\n\t\t\t\t\tm2.rotationY = _parseAngle((\"rotationY\" in v) ? v.rotationY : (\"shortRotationY\" in v) ? v.shortRotationY + \"_short\" : m1.rotationY || 0, m1.rotationY, \"rotationY\", endRotations);\n\t\t\t\t}\n\t\t\t\tm2.skewX = _parseAngle(v.skewX, m1.skewX);\n\t\t\t\tm2.skewY = _parseAngle(v.skewY, m1.skewY);\n\t\t\t}\n\t\t\tif (_supports3D && v.force3D != null) {\n\t\t\t\tm1.force3D = v.force3D;\n\t\t\t\thasChange = true;\n\t\t\t}\n\n\t\t\thas3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective);\n\t\t\tif (!has3D && v.scale != null) {\n\t\t\t\tm2.scaleZ = 1; //no need to tween scaleZ.\n\t\t\t}\n\n\t\t\twhile (--i > -1) {\n\t\t\t\tp = _transformProps[i];\n\t\t\t\torig = m2[p] - m1[p];\n\t\t\t\tif (orig > min || orig < -min || v[p] != null || _forcePT[p] != null) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tpt = new CSSPropTween(m1, p, m1[p], orig, pt);\n\t\t\t\t\tif (p in endRotations) {\n\t\t\t\t\t\tpt.e = endRotations[p]; //directional rotations typically have compensated values during the tween, but we need to make sure they end at exactly what the user requested\n\t\t\t\t\t}\n\t\t\t\t\tpt.xs0 = 0; //ensures the value stays numeric in setRatio()\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torig = (typeof(v.transformOrigin) === \"function\") ? v.transformOrigin(_index, _target) : v.transformOrigin;\n\t\t\tif (m1.svg && (orig || v.svgOrigin)) {\n\t\t\t\tx = m1.xOffset; //when we change the origin, in order to prevent things from jumping we adjust the x/y so we must record those here so that we can create PropTweens for them and flip them at the same time as the origin\n\t\t\t\ty = m1.yOffset;\n\t\t\t\t_parseSVGOrigin(t, _parsePosition(orig), m2, v.svgOrigin, v.smoothOrigin);\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOrigin\", (originalGSTransform ? m1 : m2).xOrigin, m2.xOrigin, pt, transformOriginString); //note: if there wasn't a transformOrigin defined yet, just start with the destination one; it's wasteful otherwise, and it causes problems with fromTo() tweens. For example, TweenLite.to(\"#wheel\", 3, {rotation:180, transformOrigin:\"50% 50%\", delay:1}); TweenLite.fromTo(\"#wheel\", 3, {scale:0.5, transformOrigin:\"50% 50%\"}, {scale:1, delay:2}); would cause a jump when the from values revert at the beginning of the 2nd tween.\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOrigin\", (originalGSTransform ? m1 : m2).yOrigin, m2.yOrigin, pt, transformOriginString);\n\t\t\t\tif (x !== m1.xOffset || y !== m1.yOffset) {\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"xOffset\", (originalGSTransform ? x : m1.xOffset), m1.xOffset, pt, transformOriginString);\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \"yOffset\", (originalGSTransform ? y : m1.yOffset), m1.yOffset, pt, transformOriginString);\n\t\t\t\t}\n\t\t\t\torig = \"0px 0px\"; //certain browsers (like firefox) completely botch transform-origin, so we must remove it to prevent it from contaminating transforms. We manage it ourselves with xOrigin and yOrigin\n\t\t\t}\n\t\t\tif (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a \"transformOrigin\" in this particular tween (maybe they did it via css directly).\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tp = _transformOriginProp;\n\t\t\t\t\tif (!orig) {\n\t\t\t\t\t\torig = (_getStyle(t, p, _cs, false, \"50% 50%\") + \"\").split(\" \");\n\t\t\t\t\t\torig = orig[0] + \" \" + orig[1] + \" \" + m1.zOrigin + \"px\";\n\t\t\t\t\t}\n\t\t\t\t\torig += \"\";\n\t\t\t\t\tpt = new CSSPropTween(style, p, 0, 0, pt, -1, transformOriginString);\n\t\t\t\t\tpt.b = style[p];\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\tcopy = m1.zOrigin;\n\t\t\t\t\t\torig = orig.split(\" \");\n\t\t\t\t\t\tm1.zOrigin = ((orig.length > 2) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method.\n\t\t\t\t\t\tpt.xs0 = pt.e = orig[0] + \" \" + (orig[1] || \"50%\") + \" 0px\"; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)!\n\t\t\t\t\t\tpt = new CSSPropTween(m1, \"zOrigin\", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here)\n\t\t\t\t\t\tpt.b = copy;\n\t\t\t\t\t\tpt.xs0 = pt.e = m1.zOrigin;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.xs0 = pt.e = orig;\n\t\t\t\t\t}\n\n\t\t\t\t\t//for older versions of IE (6-8), we need to manually calculate things inside the setRatio() function. We record origin x and y (ox and oy) and whether or not the values are percentages (oxp and oyp).\n\t\t\t\t} else {\n\t\t\t\t\t_parsePosition(orig + \"\", m1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasChange) {\n\t\t\t\tcssp._transformType = (!(m1.svg && _useSVGTransformAttr) && (has3D || this._transformType === 3)) ? 3 : 2; //quicker than calling cssp._enableTransforms();\n\t\t\t}\n\t\t\tif (scaleFunc) {\n\t\t\t\tvars.scale = scaleFunc;\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, allowFunc:true, prefix:true});\n\n\t\t_registerComplexSpecialProp(\"boxShadow\", {defaultValue:\"0px 0px 0px 0px #999\", prefix:true, color:true, multi:true, keyword:\"inset\"});\n\t\t_registerComplexSpecialProp(\"clipPath\", {defaultValue:\"inset(0%)\", prefix:true, multi:true, formatter:_getFormatter(\"inset(0% 0% 0% 0%)\", false, true)});\n\n\t\t_registerComplexSpecialProp(\"borderRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\te = this.format(e);\n\t\t\tvar props = [\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],\n\t\t\t\tstyle = t.style,\n\t\t\t\tea1, i, es2, bs2, bs, es, bn, en, w, h, esfx, bsfx, rel, hn, vn, em;\n\t\t\tw = parseFloat(t.offsetWidth);\n\t\t\th = parseFloat(t.offsetHeight);\n\t\t\tea1 = e.split(\" \");\n\t\t\tfor (i = 0; i < props.length; i++) { //if we're dealing with percentages, we must convert things separately for the horizontal and vertical axis!\n\t\t\t\tif (this.p.indexOf(\"border\")) { //older browsers used a prefix\n\t\t\t\t\tprops[i] = _checkPropPrefix(props[i]);\n\t\t\t\t}\n\t\t\t\tbs = bs2 = _getStyle(t, props[i], _cs, false, \"0px\");\n\t\t\t\tif (bs.indexOf(\" \") !== -1) {\n\t\t\t\t\tbs2 = bs.split(\" \");\n\t\t\t\t\tbs = bs2[0];\n\t\t\t\t\tbs2 = bs2[1];\n\t\t\t\t}\n\t\t\t\tes = es2 = ea1[i];\n\t\t\t\tbn = parseFloat(bs);\n\t\t\t\tbsfx = bs.substr((bn + \"\").length);\n\t\t\t\trel = (es.charAt(1) === \"=\");\n\t\t\t\tif (rel) {\n\t\t\t\t\ten = parseInt(es.charAt(0)+\"1\", 10);\n\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \"\").length - (en < 0 ? 1 : 0)) || \"\";\n\t\t\t\t} else {\n\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \"\").length);\n\t\t\t\t}\n\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\tesfx = _suffixMap[p] || bsfx;\n\t\t\t\t}\n\t\t\t\tif (esfx !== bsfx) {\n\t\t\t\t\thn = _convertToPixels(t, \"borderLeft\", bn, bsfx); //horizontal number (we use a bogus \"borderLeft\" property just because the _convertToPixels() method searches for the keywords \"Left\", \"Right\", \"Top\", and \"Bottom\" to determine of it's a horizontal or vertical property, and we need \"border\" in the name so that it knows it should measure relative to the element itself, not its parent.\n\t\t\t\t\tvn = _convertToPixels(t, \"borderTop\", bn, bsfx); //vertical number\n\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\tbs = (hn / w * 100) + \"%\";\n\t\t\t\t\t\tbs2 = (vn / h * 100) + \"%\";\n\t\t\t\t\t} else if (esfx === \"em\") {\n\t\t\t\t\t\tem = _convertToPixels(t, \"borderLeft\", 1, \"em\");\n\t\t\t\t\t\tbs = (hn / em) + \"em\";\n\t\t\t\t\t\tbs2 = (vn / em) + \"em\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbs = hn + \"px\";\n\t\t\t\t\t\tbs2 = vn + \"px\";\n\t\t\t\t\t}\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\tes = (parseFloat(bs) + en) + esfx;\n\t\t\t\t\t\tes2 = (parseFloat(bs2) + en) + esfx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = _parseComplex(style, props[i], bs + \" \" + bs2, es + \" \" + es2, false, \"0px\", pt);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px 0px 0px\", false, true)});\n\t\t_registerComplexSpecialProp(\"borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\", {defaultValue:\"0px\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\treturn _parseComplex(t.style, p, this.format(_getStyle(t, p, _cs, false, \"0px 0px\")), this.format(e), false, \"0px\", pt);\n\t\t}, prefix:true, formatter:_getFormatter(\"0px 0px\", false, true)});\n\t\t_registerComplexSpecialProp(\"backgroundPosition\", {defaultValue:\"0 0\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bp = \"background-position\",\n\t\t\t\tcs = (_cs || _getComputedStyle(t, null)),\n\t\t\t\tbs = this.format( ((cs) ? _ieVers ? cs.getPropertyValue(bp + \"-x\") + \" \" + cs.getPropertyValue(bp + \"-y\") : cs.getPropertyValue(bp) : t.currentStyle.backgroundPositionX + \" \" + t.currentStyle.backgroundPositionY) || \"0 0\"), //Internet Explorer doesn't report background-position correctly - we must query background-position-x and background-position-y and combine them (even in IE10). Before IE9, we must do the same with the currentStyle object and use camelCase\n\t\t\t\tes = this.format(e),\n\t\t\t\tba, ea, i, pct, overlap, src;\n\t\t\tif ((bs.indexOf(\"%\") !== -1) !== (es.indexOf(\"%\") !== -1) && es.split(\",\").length < 2) {\n\t\t\t\tsrc = _getStyle(t, \"backgroundImage\").replace(_urlExp, \"\");\n\t\t\t\tif (src && src !== \"none\") {\n\t\t\t\t\tba = bs.split(\" \");\n\t\t\t\t\tea = es.split(\" \");\n\t\t\t\t\t_tempImg.setAttribute(\"src\", src); //set the temp IMG's src to the background-image so that we can measure its width/height\n\t\t\t\t\ti = 2;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tbs = ba[i];\n\t\t\t\t\t\tpct = (bs.indexOf(\"%\") !== -1);\n\t\t\t\t\t\tif (pct !== (ea[i].indexOf(\"%\") !== -1)) {\n\t\t\t\t\t\t\toverlap = (i === 0) ? t.offsetWidth - _tempImg.width : t.offsetHeight - _tempImg.height;\n\t\t\t\t\t\t\tba[i] = pct ? (parseFloat(bs) / 100 * overlap) + \"px\" : (parseFloat(bs) / overlap * 100) + \"%\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbs = ba.join(\" \");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, bs, es, pt, plugin);\n\t\t}, formatter:_parsePosition});\n\t\t_registerComplexSpecialProp(\"backgroundSize\", {defaultValue:\"0 0\", formatter:function(v) {\n\t\t\tv += \"\"; //ensure it's a string\n\t\t\treturn (v.substr(0,2) === \"co\") ? v : _parsePosition(v.indexOf(\" \") === -1 ? v + \" \" + v : v); //if set to something like \"100% 100%\", Safari typically reports the computed style as just \"100%\" (no 2nd value), but we should ensure that there are two values, so copy the first one. Otherwise, it'd be interpreted as \"100% 0\" (wrong). Also remember that it could be \"cover\" or \"contain\" which we can't tween but should be able to set.\n\t\t}});\n\t\t_registerComplexSpecialProp(\"perspective\", {defaultValue:\"0px\", prefix:true});\n\t\t_registerComplexSpecialProp(\"perspectiveOrigin\", {defaultValue:\"50% 50%\", prefix:true});\n\t\t_registerComplexSpecialProp(\"transformStyle\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"backfaceVisibility\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"userSelect\", {prefix:true});\n\t\t_registerComplexSpecialProp(\"margin\", {parser:_getEdgeParser(\"marginTop,marginRight,marginBottom,marginLeft\")});\n\t\t_registerComplexSpecialProp(\"padding\", {parser:_getEdgeParser(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")});\n\t\t_registerComplexSpecialProp(\"clip\", {defaultValue:\"rect(0px,0px,0px,0px)\", parser:function(t, e, p, cssp, pt, plugin){\n\t\t\tvar b, cs, delim;\n\t\t\tif (_ieVers < 9) { //IE8 and earlier don't report a \"clip\" value in the currentStyle - instead, the values are split apart into clipTop, clipRight, clipBottom, and clipLeft. Also, in IE7 and earlier, the values inside rect() are space-delimited, not comma-delimited.\n\t\t\t\tcs = t.currentStyle;\n\t\t\t\tdelim = _ieVers < 8 ? \" \" : \",\";\n\t\t\t\tb = \"rect(\" + cs.clipTop + delim + cs.clipRight + delim + cs.clipBottom + delim + cs.clipLeft + \")\";\n\t\t\t\te = this.format(e).split(\",\").join(delim);\n\t\t\t} else {\n\t\t\t\tb = this.format(_getStyle(t, this.p, _cs, false, this.dflt));\n\t\t\t\te = this.format(e);\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, b, e, pt, plugin);\n\t\t}});\n\t\t_registerComplexSpecialProp(\"textShadow\", {defaultValue:\"0px 0px 0px #999\", color:true, multi:true});\n\t\t_registerComplexSpecialProp(\"autoRound,strictUnits\", {parser:function(t, e, p, cssp, pt) {return pt;}}); //just so that we can ignore these properties (not tween them)\n\t\t_registerComplexSpecialProp(\"border\", {defaultValue:\"0px solid #000\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bw = _getStyle(t, \"borderTopWidth\", _cs, false, \"0px\"),\n\t\t\t\tend = this.format(e).split(\" \"),\n\t\t\t\tesfx = end[0].replace(_suffixExp, \"\");\n\t\t\tif (esfx !== \"px\") { //if we're animating to a non-px value, we need to convert the beginning width to that unit.\n\t\t\t\tbw = (parseFloat(bw) / _convertToPixels(t, \"borderTopWidth\", 1, esfx)) + esfx;\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, this.format(bw + \" \" + _getStyle(t, \"borderTopStyle\", _cs, false, \"solid\") + \" \" + _getStyle(t, \"borderTopColor\", _cs, false, \"#000\")), end.join(\" \"), pt, plugin);\n\t\t\t}, color:true, formatter:function(v) {\n\t\t\t\tvar a = v.split(\" \");\n\t\t\t\treturn a[0] + \" \" + (a[1] || \"solid\") + \" \" + (v.match(_colorExp) || [\"#000\"])[0];\n\t\t\t}});\n\t\t_registerComplexSpecialProp(\"borderWidth\", {parser:_getEdgeParser(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}); //Firefox doesn't pick up on borderWidth set in style sheets (only inline).\n\t\t_registerComplexSpecialProp(\"float,cssFloat,styleFloat\", {parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar s = t.style,\n\t\t\t\tprop = (\"cssFloat\" in s) ? \"cssFloat\" : \"styleFloat\";\n\t\t\treturn new CSSPropTween(s, prop, 0, 0, pt, -1, p, false, 0, s[prop], e);\n\t\t}});\n\n\t\t//opacity-related\n\t\tvar _setIEOpacityRatio = function(v) {\n\t\t\t\tvar t = this.t, //refers to the element's style property\n\t\t\t\t\tfilters = t.filter || _getStyle(this.data, \"filter\") || \"\",\n\t\t\t\t\tval = (this.s + this.c * v) | 0,\n\t\t\t\t\tskip;\n\t\t\t\tif (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters.\n\t\t\t\t\tif (filters.indexOf(\"atrix(\") === -1 && filters.indexOf(\"radient(\") === -1 && filters.indexOf(\"oader(\") === -1) {\n\t\t\t\t\t\tt.removeAttribute(\"filter\");\n\t\t\t\t\t\tskip = (!_getStyle(this.data, \"filter\")); //if a class is applied that has an alpha filter, it will take effect (we don't want that), so re-apply our alpha filter in that case. We must first remove it and then check.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_alphaFilterExp, \"\");\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skip) {\n\t\t\t\t\tif (this.xn1) {\n\t\t\t\t\t\tt.filter = filters = filters || (\"alpha(opacity=\" + val + \")\"); //works around bug in IE7/8 that prevents changes to \"visibility\" from being applied properly if the filter is changed to a different alpha on the same frame.\n\t\t\t\t\t}\n\t\t\t\t\tif (filters.indexOf(\"pacity\") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8). We omit the \"O\" to avoid case-sensitivity issues\n\t\t\t\t\t\tif (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as \"visibility\" changes (this.xn1 is 1 if this tween is an \"autoAlpha\" tween)\n\t\t\t\t\t\t\tt.filter = filters + \" alpha(opacity=\" + val + \")\"; //we round the value because otherwise, bugs in IE7/8 can prevent \"visibility\" changes from being applied properly.\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_opacityExp, \"opacity=\" + val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\"opacity,alpha,autoAlpha\", {defaultValue:\"1\", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar b = parseFloat(_getStyle(t, \"opacity\", _cs, false, \"1\")),\n\t\t\t\tstyle = t.style,\n\t\t\t\tisAutoAlpha = (p === \"autoAlpha\");\n\t\t\tif (typeof(e) === \"string\" && e.charAt(1) === \"=\") {\n\t\t\t\te = ((e.charAt(0) === \"-\") ? -1 : 1) * parseFloat(e.substr(2)) + b;\n\t\t\t}\n\t\t\tif (isAutoAlpha && b === 1 && _getStyle(t, \"visibility\", _cs) === \"hidden\" && e !== 0) { //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n\t\t\t\tb = 0;\n\t\t\t}\n\t\t\tif (_supportsOpacity) {\n\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b, e - b, pt);\n\t\t\t} else {\n\t\t\t\tpt = new CSSPropTween(style, \"opacity\", b * 100, (e - b) * 100, pt);\n\t\t\t\tpt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to \"visibility\" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug.\n\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\tpt.type = 2;\n\t\t\t\tpt.b = \"alpha(opacity=\" + pt.s + \")\";\n\t\t\t\tpt.e = \"alpha(opacity=\" + (pt.s + pt.c) + \")\";\n\t\t\t\tpt.data = t;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setIEOpacityRatio;\n\t\t\t}\n\t\t\tif (isAutoAlpha) { //we have to create the \"visibility\" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier\n\t\t\t\tpt = new CSSPropTween(style, \"visibility\", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? \"inherit\" : \"hidden\"), ((e === 0) ? \"hidden\" : \"inherit\"));\n\t\t\t\tpt.xs0 = \"inherit\";\n\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\tcssp._overwriteProps.push(p);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _removeProp = function(s, p) {\n\t\t\t\tif (p) {\n\t\t\t\t\tif (s.removeProperty) {\n\t\t\t\t\t\tif (p.substr(0,2) === \"ms\" || p.substr(0,6) === \"webkit\") { //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n\t\t\t\t\t\t\tp = \"-\" + p;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t\t} else { //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n\t\t\t\t\t\ts.removeAttribute(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setClassNameRatio = function(v) {\n\t\t\t\tthis.t._gsClassPT = this;\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tthis.t.setAttribute(\"class\", (v === 0) ? this.b : this.e);\n\t\t\t\t\tvar mpt = this.data, //first MiniPropTween\n\t\t\t\t\t\ts = this.t.style;\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tif (!mpt.v) {\n\t\t\t\t\t\t\t_removeProp(s, mpt.p);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ts[mpt.p] = mpt.v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (v === 1 && this.t._gsClassPT === this) {\n\t\t\t\t\t\tthis.t._gsClassPT = null;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.t.getAttribute(\"class\") !== this.e) {\n\t\t\t\t\tthis.t.setAttribute(\"class\", this.e);\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\"className\", {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\tvar b = t.getAttribute(\"class\") || \"\", //don't use t.className because it doesn't work consistently on SVG elements; getAttribute(\"class\") and setAttribute(\"class\", value\") is more reliable.\n\t\t\t\tcssText = t.style.cssText,\n\t\t\t\tdifData, bs, cnpt, cnptLookup, mpt;\n\t\t\tpt = cssp._classNamePT = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClassNameRatio;\n\t\t\tpt.pr = -11;\n\t\t\t_hasPriority = true;\n\t\t\tpt.b = b;\n\t\t\tbs = _getAllStyles(t, _cs);\n\t\t\t//if there's a className tween already operating on the target, force it to its end so that the necessary inline styles are removed and the class name is applied before we determine the end state (we don't want inline styles interfering that were there just for class-specific values)\n\t\t\tcnpt = t._gsClassPT;\n\t\t\tif (cnpt) {\n\t\t\t\tcnptLookup = {};\n\t\t\t\tmpt = cnpt.data; //first MiniPropTween which stores the inline styles - we need to force these so that the inline styles don't contaminate things. Otherwise, there's a small chance that a tween could start and the inline values match the destination values and they never get cleaned.\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tcnptLookup[mpt.p] = 1;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tcnpt.setRatio(1);\n\t\t\t}\n\t\t\tt._gsClassPT = pt;\n\t\t\tpt.e = (e.charAt(1) !== \"=\") ? e : b.replace(new RegExp(\"(?:\\\\s|^)\" + e.substr(2) + \"(?![\\\\w-])\"), \"\") + ((e.charAt(0) === \"+\") ? \" \" + e.substr(2) : \"\");\n\t\t\tt.setAttribute(\"class\", pt.e);\n\t\t\tdifData = _cssDif(t, bs, _getAllStyles(t), vars, cnptLookup);\n\t\t\tt.setAttribute(\"class\", b);\n\t\t\tpt.data = difData.firstMPT;\n\t\t\tif (t.style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://greensock.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\n\t\t\t\tt.style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n\t\t\t}\n\t\t\tpt = pt.xfirst = cssp.parse(t, difData.difs, pt, plugin); //we record the CSSPropTween as the xfirst so that we can handle overwriting propertly (if \"className\" gets overwritten, we must kill all the properties associated with the className part of the tween, so we can loop through from xfirst to the pt itself)\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _setClearPropsRatio = function(v) {\n\t\t\tif (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration && this.data.data !== \"isFromStart\") { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that and if the tween is the zero-duration one that's created internally to render the starting values in a from() tween, ignore that because otherwise, for example, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in).\n\t\t\t\tvar s = this.t.style,\n\t\t\t\t\ttransformParse = _specialProps.transform.parse,\n\t\t\t\t\ta, p, i, clearTransform, transform;\n\t\t\t\tif (this.e === \"all\") {\n\t\t\t\t\ts.cssText = \"\";\n\t\t\t\t\tclearTransform = true;\n\t\t\t\t} else {\n\t\t\t\t\ta = this.e.split(\" \").join(\"\").split(\",\");\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = a[i];\n\t\t\t\t\t\tif (_specialProps[p]) {\n\t\t\t\t\t\t\tif (_specialProps[p].parse === transformParse) {\n\t\t\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp = (p === \"transformOrigin\") ? _transformOriginProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like \"scaleX\" might be \"-webkit-transform\" or \"boxShadow\" might be \"-moz-box-shadow\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_removeProp(s, p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (clearTransform) {\n\t\t\t\t\t_removeProp(s, _transformProp);\n\t\t\t\t\ttransform = this.t._gsTransform;\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tif (transform.svg) {\n\t\t\t\t\t\t\tthis.t.removeAttribute(\"data-svg-origin\");\n\t\t\t\t\t\t\tthis.t.removeAttribute(\"transform\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete this.t._gsTransform;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\t_registerComplexSpecialProp(\"clearProps\", {parser:function(t, e, p, cssp, pt) {\n\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClearPropsRatio;\n\t\t\tpt.e = e;\n\t\t\tpt.pr = -10;\n\t\t\tpt.data = cssp._tween;\n\t\t\t_hasPriority = true;\n\t\t\treturn pt;\n\t\t}});\n\n\t\tp = \"bezier,throwProps,physicsProps,physics2D\".split(\",\");\n\t\ti = p.length;\n\t\twhile (i--) {\n\t\t\t_registerPluginProp(p[i]);\n\t\t}\n\n\n\n\n\n\n\n\n\t\tp = CSSPlugin.prototype;\n\t\tp._firstPT = p._lastParsedTransform = p._transform = null;\n\n\t\t//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.\n\t\tp._onInitTween = function(target, vars, tween, index) {\n\t\t\tif (!target.nodeType) { //css is only for dom elements\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._target = _target = target;\n\t\t\tthis._tween = tween;\n\t\t\tthis._vars = vars;\n\t\t\t_index = index;\n\t\t\t_autoRound = vars.autoRound;\n\t\t\t_hasPriority = false;\n\t\t\t_suffixMap = vars.suffixMap || CSSPlugin.suffixMap;\n\t\t\t_cs = _getComputedStyle(target, \"\");\n\t\t\t_overwriteProps = this._overwriteProps;\n\t\t\tvar style = target.style,\n\t\t\t\tv, pt, pt2, first, last, next, zIndex, tpt, threeD;\n\t\t\tif (_reqSafariFix) if (style.zIndex === \"\") {\n\t\t\t\tv = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\tif (v === \"auto\" || v === \"\") {\n\t\t\t\t\t//corrects a bug in [non-Android] Safari that prevents it from repainting elements in their new positions if they don't have a zIndex set. We also can't just apply this inside _parseTransform() because anything that's moved in any way (like using \"left\" or \"top\" instead of transforms like \"x\" and \"y\") can be affected, so it is best to ensure that anything that's tweening has a z-index. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly. Plus zIndex is less memory-intensive.\n\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof(vars) === \"string\") {\n\t\t\t\tfirst = style.cssText;\n\t\t\t\tv = _getAllStyles(target, _cs);\n\t\t\t\tstyle.cssText = first + \";\" + vars;\n\t\t\t\tv = _cssDif(target, v, _getAllStyles(target)).difs;\n\t\t\t\tif (!_supportsOpacity && _opacityValExp.test(vars)) {\n\t\t\t\t\tv.opacity = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tvars = v;\n\t\t\t\tstyle.cssText = first;\n\t\t\t}\n\n\t\t\tif (vars.className) { //className tweens will combine any differences they find in the css with the vars that are passed in, so {className:\"myClass\", scale:0.5, left:20} would work.\n\t\t\t\tthis._firstPT = pt = _specialProps.className.parse(target, vars.className, \"className\", this, null, null, vars);\n\t\t\t} else {\n\t\t\t\tthis._firstPT = pt = this.parse(target, vars, null);\n\t\t\t}\n\n\t\t\tif (this._transformType) {\n\t\t\t\tthreeD = (this._transformType === 3);\n\t\t\t\tif (!_transformProp) {\n\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t} else if (_isSafari) {\n\t\t\t\t\t_reqSafariFix = true;\n\t\t\t\t\t//if zIndex isn't set, iOS Safari doesn't repaint things correctly sometimes (seemingly at random).\n\t\t\t\t\tif (style.zIndex === \"\") {\n\t\t\t\t\t\tzIndex = _getStyle(target, \"zIndex\", _cs);\n\t\t\t\t\t\tif (zIndex === \"auto\" || zIndex === \"\") {\n\t\t\t\t\t\t\tthis._addLazySet(style, \"zIndex\", 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//Setting WebkitBackfaceVisibility corrects 3 bugs:\n\t\t\t\t\t// 1) [non-Android] Safari skips rendering changes to \"top\" and \"left\" that are made on the same frame/render as a transform update.\n\t\t\t\t\t// 2) iOS Safari sometimes neglects to repaint elements in their new positions. Setting \"WebkitPerspective\" to a non-zero value worked too except that on iOS Safari things would flicker randomly.\n\t\t\t\t\t// 3) Safari sometimes displayed odd artifacts when tweening the transform (or WebkitTransform) property, like ghosts of the edges of the element remained. Definitely a browser bug.\n\t\t\t\t\t//Note: we allow the user to override the auto-setting by defining WebkitBackfaceVisibility in the vars of the tween.\n\t\t\t\t\tif (_isSafariLT6) {\n\t\t\t\t\t\tthis._addLazySet(style, \"WebkitBackfaceVisibility\", this._vars.WebkitBackfaceVisibility || (threeD ? \"visible\" : \"hidden\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt2 = pt;\n\t\t\t\twhile (pt2 && pt2._next) {\n\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t}\n\t\t\t\ttpt = new CSSPropTween(target, \"transform\", 0, 0, null, 2);\n\t\t\t\tthis._linkCSSP(tpt, null, pt2);\n\t\t\t\ttpt.setRatio = _transformProp ? _setTransformRatio : _setIETransformRatio;\n\t\t\t\ttpt.data = this._transform || _getTransform(target, _cs, true);\n\t\t\t\ttpt.tween = tween;\n\t\t\t\ttpt.pr = -1; //ensures that the transforms get applied after the components are updated.\n\t\t\t\t_overwriteProps.pop(); //we don't want to force the overwrite of all \"transform\" tweens of the target - we only care about individual transform properties like scaleX, rotation, etc. The CSSPropTween constructor automatically adds the property to _overwriteProps which is why we need to pop() here.\n\t\t\t}\n\n\t\t\tif (_hasPriority) {\n\t\t\t\t//reorders the linked list in order of pr (priority)\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tthis._firstPT = first;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\n\t\tp.parse = function(target, vars, pt, plugin) {\n\t\t\tvar style = target.style,\n\t\t\t\tp, sp, bn, en, bs, es, bsfx, esfx, isStr, rel;\n\t\t\tfor (p in vars) {\n\t\t\t\tes = vars[p]; //ending value string\n\t\t\t\tsp = _specialProps[p]; //SpecialProp lookup.\n\t\t\t\tif (typeof(es) === \"function\" && !(sp && sp.allowFunc)) {\n\t\t\t\t\tes = es(_index, _target);\n\t\t\t\t}\n\t\t\t\tif (sp) {\n\t\t\t\t\tpt = sp.parse(target, es, p, this, pt, plugin, vars);\n\t\t\t\t} else if (p.substr(0,2) === \"--\") { //for tweening CSS variables (which always start with \"--\"). To maximize performance and simplicity, we bypass CSSPlugin altogether and just add a normal property tween to the tween instance itself.\n\t\t\t\t\tthis._tween._propLookup[p] = this._addTween.call(this._tween, target.style, \"setProperty\", _getComputedStyle(target).getPropertyValue(p) + \"\", es + \"\", p, false, p);\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbs = _getStyle(target, p, _cs) + \"\";\n\t\t\t\t\tisStr = (typeof(es) === \"string\");\n\t\t\t\t\tif (p === \"color\" || p === \"fill\" || p === \"stroke\" || p.indexOf(\"Color\") !== -1 || (isStr && _rgbhslExp.test(es))) { //Opera uses background: to define color sometimes in addition to backgroundColor:\n\t\t\t\t\t\tif (!isStr) {\n\t\t\t\t\t\t\tes = _parseColor(es);\n\t\t\t\t\t\t\tes = ((es.length > 3) ? \"rgba(\" : \"rgb(\") + es.join(\",\") + \")\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, \"transparent\", pt, 0, plugin);\n\n\t\t\t\t\t} else if (isStr && _complexExp.test(es)) {\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, null, pt, 0, plugin);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\t\tbsfx = (bn || bn === 0) ? bs.substr((bn + \"\").length) : \"\"; //remember, bs could be non-numeric like \"normal\" for fontWeight, so we should default to a blank suffix in that case.\n\n\t\t\t\t\t\tif (bs === \"\" || bs === \"auto\") {\n\t\t\t\t\t\t\tif (p === \"width\" || p === \"height\") {\n\t\t\t\t\t\t\t\tbn = _getDimension(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t} else if (p === \"left\" || p === \"top\") {\n\t\t\t\t\t\t\t\tbn = _calculateOffset(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \"px\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbn = (p !== \"opacity\") ? 0 : 1;\n\t\t\t\t\t\t\t\tbsfx = \"\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trel = (isStr && es.charAt(1) === \"=\");\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten = parseInt(es.charAt(0) + \"1\", 10);\n\t\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\t\tesfx = es.replace(_suffixExp, \"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\t\tesfx = isStr ? es.replace(_suffixExp, \"\") : \"\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (esfx === \"\") {\n\t\t\t\t\t\t\tesfx = (p in _suffixMap) ? _suffixMap[p] : bsfx; //populate the end suffix, prioritizing the map, then if none is found, use the beginning suffix.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tes = (en || en === 0) ? (rel ? en + bn : en) + esfx : vars[p]; //ensures that any += or -= prefixes are taken care of. Record the end value before normalizing the suffix because we always want to end the tween on exactly what they intended even if it doesn't match the beginning value's suffix.\n\t\t\t\t\t\t//if the beginning/ending suffixes don't match, normalize them...\n\t\t\t\t\t\tif (bsfx !== esfx) if (esfx !== \"\" || p === \"lineHeight\") if (en || en === 0) if (bn) { //note: if the beginning value (bn) is 0, we don't need to convert units!\n\t\t\t\t\t\t\tbn = _convertToPixels(target, p, bn, bsfx);\n\t\t\t\t\t\t\tif (esfx === \"%\") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 100, \"%\") / 100;\n\t\t\t\t\t\t\t\tif (vars.strictUnits !== true) { //some browsers report only \"px\" values instead of allowing \"%\" with getComputedStyle(), so we assume that if we're tweening to a %, we should start there too unless strictUnits:true is defined. This approach is particularly useful for responsive designs that use from() tweens.\n\t\t\t\t\t\t\t\t\tbs = bn + \"%\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if (esfx === \"em\" || esfx === \"rem\" || esfx === \"vw\" || esfx === \"vh\") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 1, esfx);\n\n\t\t\t\t\t\t\t//otherwise convert to pixels.\n\t\t\t\t\t\t\t} else if (esfx !== \"px\") {\n\t\t\t\t\t\t\t\ten = _convertToPixels(target, p, en, esfx);\n\t\t\t\t\t\t\t\tesfx = \"px\"; //we don't use bsfx after this, so we don't need to set it to px too.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (rel) if (en || en === 0) {\n\t\t\t\t\t\t\t\tes = (en + bn) + esfx; //the changes we made affect relative calculations, so adjust the end value here.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten += bn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((bn || bn === 0) && (en || en === 0)) { //faster than isNaN(). Also, previously we required en !== bn but that doesn't really gain much performance and it prevents _parseToProxy() from working properly if beginning and ending values match but need to get tweened by an external plugin anyway. For example, a bezier tween where the target starts at left:0 and has these points: [{left:50},{left:0}] wouldn't work properly because when parsing the last point, it'd match the first (current) one and a non-tweening CSSPropTween would be recorded when we actually need a normal tween (type:0) so that things get updated during the tween properly.\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, bn, en - bn, pt, 0, p, (_autoRound !== false && (esfx === \"px\" || p === \"zIndex\")), 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = esfx;\n\t\t\t\t\t\t\t//DEBUG: _log(\"tween \"+p+\" from \"+pt.b+\" (\"+bn+esfx+\") to \"+pt.e+\" with suffix: \"+pt.xs0);\n\t\t\t\t\t\t} else if (style[p] === undefined || !es && (es + \"\" === \"NaN\" || es == null)) {\n\t\t\t\t\t\t\t_log(\"invalid \" + p + \" tween value: \" + vars[p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, en || bn || 0, 0, pt, -1, p, false, 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = (es === \"none\" && (p === \"display\" || p.indexOf(\"Style\") !== -1)) ? bs : es; //intermediate value should typically be set immediately (end value) except for \"display\" or things like borderTopStyle, borderBottomStyle, etc. which should use the beginning value during the tween.\n\t\t\t\t\t\t\t//DEBUG: _log(\"non-tweening value \"+p+\": \"+pt.xs0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (plugin) if (pt && !pt.plugin) {\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\n\t\t//gets called every time the tween updates, passing the new ratio (typically a value between 0 and 1, but not always (for example, if an Elastic.easeOut is used, the value can jump above 1 mid-tween). It will always start and 0 and end at 1.\n\t\tp.setRatio = function(v) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tval, str, i;\n\t\t\t//at the end of the tween, we set the values to exactly what we received in order to make sure non-tweening values (like \"position\" or \"float\" or whatever) are set and so that if the beginning/ending suffixes (units) didn't match and we normalized to px, the value that the user passed in is used here. We check to see if the tween is at its beginning in case it's a from() tween in which case the ratio will actually go from 1 to 0 over the course of the tween (backwards).\n\t\t\tif (v === 1 && (this._tween._time === this._tween._duration || this._tween._time === 0)) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tif (pt.r && pt.type !== -1) {\n\t\t\t\t\t\t\tval = pt.r(pt.s + pt.c);\n\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.e;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t} else if (v || !(this._tween._time === this._tween._duration || this._tween._time === 0) || this._tween._rawPrevTime === -0.000001) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = pt.c * v + pt.s;\n\t\t\t\t\tif (pt.r) {\n\t\t\t\t\t\tval = pt.r(val);\n\t\t\t\t\t} else if (val < min) if (val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \"rect(5px,10px,20px,25px)\"\n\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\tif (i === 2) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2;\n\t\t\t\t\t\t} else if (i === 3) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3;\n\t\t\t\t\t\t} else if (i === 4) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4;\n\t\t\t\t\t\t} else if (i === 5) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4 + pt.xn4 + pt.xs5;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\"xn\"+i] + pt[\"xs\"+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (pt.type === -1) { //non-tweening value\n\t\t\t\t\t\tpt.t[pt.p] = pt.xs0;\n\n\t\t\t\t\t} else if (pt.setRatio) { //custom setRatio() for things like SpecialProps, external plugins, etc.\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t//if the tween is reversed all the way back to the beginning, we need to restore the original values which may have different units (like % instead of px or em or whatever).\n\t\t\t} else {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tpt.t[pt.p] = pt.b;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * @private\n\t\t * Forces rendering of the target's transforms (rotation, scale, etc.) whenever the CSSPlugin's setRatio() is called.\n\t\t * Basically, this tells the CSSPlugin to create a CSSPropTween (type 2) after instantiation that runs last in the linked\n\t\t * list and calls the appropriate (3D or 2D) rendering function. We separate this into its own method so that we can call\n\t\t * it from other plugins like BezierPlugin if, for example, it needs to apply an autoRotation and this CSSPlugin\n\t\t * doesn't have any transform-related properties of its own. You can call this method as many times as you\n\t\t * want and it won't create duplicate CSSPropTweens.\n\t\t *\n\t\t * @param {boolean} threeD if true, it should apply 3D tweens (otherwise, just 2D ones are fine and typically faster)\n\t\t */\n\t\tp._enableTransforms = function(threeD) {\n\t\t\tthis._transform = this._transform || _getTransform(this._target, _cs, true); //ensures that the element has a _gsTransform property with the appropriate values.\n\t\t\tthis._transformType = (!(this._transform.svg && _useSVGTransformAttr) && (threeD || this._transformType === 3)) ? 3 : 2;\n\t\t};\n\n\t\tvar lazySet = function(v) {\n\t\t\tthis.t[this.p] = this.e;\n\t\t\tthis.data._linkCSSP(this, this._next, null, true); //we purposefully keep this._next even though it'd make sense to null it, but this is a performance optimization, as this happens during the while (pt) {} loop in setRatio() at the bottom of which it sets pt = pt._next, so if we null it, the linked list will be broken in that loop.\n\t\t};\n\t\t/** @private Gives us a way to set a value on the first render (and only the first render). **/\n\t\tp._addLazySet = function(t, p, v) {\n\t\t\tvar pt = this._firstPT = new CSSPropTween(t, p, 0, 0, this._firstPT, 2);\n\t\t\tpt.e = v;\n\t\t\tpt.setRatio = lazySet;\n\t\t\tpt.data = this;\n\t\t};\n\n\t\t/** @private **/\n\t\tp._linkCSSP = function(pt, next, prev, remove) {\n\t\t\tif (pt) {\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = pt;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t}\n\t\t\t\tif (pt._prev) {\n\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\tremove = true; //just to prevent resetting this._firstPT 5 lines down in case pt._next is null. (optimized for speed)\n\t\t\t\t}\n\t\t\t\tif (prev) {\n\t\t\t\t\tprev._next = pt;\n\t\t\t\t} else if (!remove && this._firstPT === null) {\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t}\n\t\t\t\tpt._next = next;\n\t\t\t\tpt._prev = prev;\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar pt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (typeof(lookup[pt.p]) === \"function\") { //only gets called by RoundPropsPlugin (ModifyPlugin manages all the rendering internally for CSSPlugin properties that need modification). Remember, we handle rounding a bit differently in this plugin for performance reasons, leveraging \"r\" as an indicator that the value should be rounded internally.\n\t\t\t\t\tpt.r = lookup[pt.p];\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\t//we need to make sure that if alpha or autoAlpha is killed, opacity is too. And autoAlpha affects the \"visibility\" property.\n\t\tp._kill = function(lookup) {\n\t\t\tvar copy = lookup,\n\t\t\t\tpt, p, xfirst;\n\t\t\tif (lookup.autoAlpha || lookup.alpha) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in lookup) { //copy the lookup so that we're not changing the original which may be passed elsewhere.\n\t\t\t\t\tcopy[p] = lookup[p];\n\t\t\t\t}\n\t\t\t\tcopy.opacity = 1;\n\t\t\t\tif (copy.autoAlpha) {\n\t\t\t\t\tcopy.visibility = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lookup.className && (pt = this._classNamePT)) { //for className tweens, we need to kill any associated CSSPropTweens too; a linked list starts at the className's \"xfirst\".\n\t\t\t\txfirst = pt.xfirst;\n\t\t\t\tif (xfirst && xfirst._prev) {\n\t\t\t\t\tthis._linkCSSP(xfirst._prev, pt._next, xfirst._prev._prev); //break off the prev\n\t\t\t\t} else if (xfirst === this._firstPT) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tthis._linkCSSP(pt._next, pt._next._next, xfirst._prev);\n\t\t\t\t}\n\t\t\t\tthis._classNamePT = null;\n\t\t\t}\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.plugin && pt.plugin !== p && pt.plugin._kill) { //for plugins that are registered with CSSPlugin, we should notify them of the kill.\n\t\t\t\t\tpt.plugin._kill(lookup);\n\t\t\t\t\tp = pt.plugin;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn TweenPlugin.prototype._kill.call(this, copy);\n\t\t};\n\n\n\n\t\t//used by cascadeTo() for gathering all the style properties of each child element into an array for comparison.\n\t\tvar _getChildStyles = function(e, props, targets) {\n\t\t\t\tvar children, i, child, type;\n\t\t\t\tif (e.slice) {\n\t\t\t\t\ti = e.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_getChildStyles(e[i], props, targets);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchildren = e.childNodes;\n\t\t\t\ti = children.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tchild = children[i];\n\t\t\t\t\ttype = child.type;\n\t\t\t\t\tif (child.style) {\n\t\t\t\t\t\tprops.push(_getAllStyles(child));\n\t\t\t\t\t\tif (targets) {\n\t\t\t\t\t\t\ttargets.push(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ((type === 1 || type === 9 || type === 11) && child.childNodes.length) {\n\t\t\t\t\t\t_getChildStyles(child, props, targets);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t/**\n\t\t * Typically only useful for className tweens that may affect child elements, this method creates a TweenLite\n\t\t * and then compares the style properties of all the target's child elements at the tween's start and end, and\n\t\t * if any are different, it also creates tweens for those and returns an array containing ALL of the resulting\n\t\t * tweens (so that you can easily add() them to a TimelineLite, for example). The reason this functionality is\n\t\t * wrapped into a separate static method of CSSPlugin instead of being integrated into all regular className tweens\n\t\t * is because it creates entirely new tweens that may have completely different targets than the original tween,\n\t\t * so if they were all lumped into the original tween instance, it would be inconsistent with the rest of the API\n\t\t * and it would create other problems. For example:\n\t\t *  - If I create a tween of elementA, that tween instance may suddenly change its target to include 50 other elements (unintuitive if I specifically defined the target I wanted)\n\t\t *  - We can't just create new independent tweens because otherwise, what happens if the original/parent tween is reversed or pause or dropped into a TimelineLite for tight control? You'd expect that tween's behavior to affect all the others.\n\t\t *  - Analyzing every style property of every child before and after the tween is an expensive operation when there are many children, so this behavior shouldn't be imposed on all className tweens by default, especially since it's probably rare that this extra functionality is needed.\n\t\t *\n\t\t * @param {Object} target object to be tweened\n\t\t * @param {number} Duration in seconds (or frames for frames-based tweens)\n\t\t * @param {Object} Object containing the end values, like {className:\"newClass\", ease:Linear.easeNone}\n\t\t * @return {Array} An array of TweenLite instances\n\t\t */\n\t\tCSSPlugin.cascadeTo = function(target, duration, vars) {\n\t\t\tvar tween = TweenLite.to(target, duration, vars),\n\t\t\t\tresults = [tween],\n\t\t\t\tb = [],\n\t\t\t\te = [],\n\t\t\t\ttargets = [],\n\t\t\t\t_reservedProps = TweenLite._internals.reservedProps,\n\t\t\t\ti, difs, p, from;\n\t\t\ttarget = tween._targets || tween.target;\n\t\t\t_getChildStyles(target, b, targets);\n\t\t\ttween.render(duration, true, true);\n\t\t\t_getChildStyles(target, e);\n\t\t\ttween.render(0, true, true);\n\t\t\ttween._enabled(true);\n\t\t\ti = targets.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tdifs = _cssDif(targets[i], b[i], e[i]);\n\t\t\t\tif (difs.firstMPT) {\n\t\t\t\t\tdifs = difs.difs;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfrom = {};\n\t\t\t\t\tfor (p in difs) {\n\t\t\t\t\t\tfrom[p] = b[i][p];\n\t\t\t\t\t}\n\t\t\t\t\tresults.push(TweenLite.fromTo(targets[i], duration, from, difs));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t\tTweenPlugin.activate([CSSPlugin]);\n\t\treturn CSSPlugin;\n\n\t}, true);\n\nexport var CSSPlugin = globals.CSSPlugin;\nexport { CSSPlugin as default };","/*!\n * VERSION: 0.3.1\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport { _gsScope } from \"./TweenLite.js\";\n\nexport var DirectionalRotationPlugin = _gsScope._gsDefine.plugin({\n\t\tpropName: \"directionalRotation\",\n\t\tversion: \"0.3.1\",\n\t\tAPI: 2,\n\n\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\tinit: function(target, value, tween, index) {\n\t\t\tif (typeof(value) !== \"object\") {\n\t\t\t\tvalue = {rotation:value};\n\t\t\t}\n\t\t\tthis.finals = {};\n\t\t\tvar cap = (value.useRadians === true) ? Math.PI * 2 : 360,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tp, v, start, end, dif, split;\n\t\t\tfor (p in value) {\n\t\t\t\tif (p !== \"useRadians\") {\n\t\t\t\t\tend = value[p];\n\t\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t}\n\t\t\t\t\tsplit = (end + \"\").split(\"_\");\n\t\t\t\t\tv = split[0];\n\t\t\t\t\tstart = parseFloat( (typeof(target[p]) !== \"function\") ? target[p] : target[ ((p.indexOf(\"set\") || typeof(target[\"get\" + p.substr(3)]) !== \"function\") ? p : \"get\" + p.substr(3)) ]() );\n\t\t\t\t\tend = this.finals[p] = (typeof(v) === \"string\" && v.charAt(1) === \"=\") ? start + parseInt(v.charAt(0) + \"1\", 10) * Number(v.substr(2)) : Number(v) || 0;\n\t\t\t\t\tdif = end - start;\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tv = split.join(\"_\");\n\t\t\t\t\t\tif (v.indexOf(\"short\") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\"_cw\") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\"ccw\") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (dif > min || dif < -min) {\n\t\t\t\t\t\tthis._addTween(target, p, start, start + dif, p);\n\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\tset: function(ratio) {\n\t\t\tvar pt;\n\t\t\tif (ratio !== 1) {\n\t\t\t\tthis._super.setRatio.call(this, ratio);\n\t\t\t} else {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](this.finals[pt.p]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = this.finals[pt.p];\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\nDirectionalRotationPlugin._autoCSS = true;\n\nexport { DirectionalRotationPlugin as default };","/*!\n * VERSION: 1.16.1\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport { _gsScope, globals, Ease, Linear, Power0, Power1, Power2, Power3, Power4 } from \"./TweenLite.js\";\n\n_gsScope._gsDefine(\"easing.Back\", [\"easing.Ease\"], function() {\n\t\t\n\t\tvar w = (_gsScope.GreenSockGlobals || _gsScope),\n\t\t\tgs = w.com.greensock,\n\t\t\t_2PI = Math.PI * 2,\n\t\t\t_HALF_PI = Math.PI / 2,\n\t\t\t_class = gs._class,\n\t\t\t_create = function(n, f) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(){}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\t_easeReg = Ease.register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist.\n\t\t\t_wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) {\n\t\t\t\tvar C = _class(\"easing.\"+name, {\n\t\t\t\t\teaseOut:new EaseOut(),\n\t\t\t\t\teaseIn:new EaseIn(),\n\t\t\t\t\teaseInOut:new EaseInOut()\n\t\t\t\t}, true);\n\t\t\t\t_easeReg(C, name);\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\tEasePoint = function(time, value, next) {\n\t\t\t\tthis.t = time;\n\t\t\t\tthis.v = value;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis.next = next;\n\t\t\t\t\tnext.prev = this;\n\t\t\t\t\tthis.c = next.v - value;\n\t\t\t\t\tthis.gap = next.t - time;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//Back\n\t\t\t_createBack = function(n, f) {\n\t\t\t\tvar C = _class(\"easing.\" + n, function(overshoot) {\n\t\t\t\t\t\tthis._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158;\n\t\t\t\t\t\tthis._p2 = this._p1 * 1.525;\n\t\t\t\t\t}, true), \n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\tp.config = function(overshoot) {\n\t\t\t\t\treturn new C(overshoot);\n\t\t\t\t};\n\t\t\t\treturn C;\n\t\t\t},\n\n\t\t\tBack = _wrap(\"Back\",\n\t\t\t\t_createBack(\"BackOut\", function(p) {\n\t\t\t\t\treturn ((p = p - 1) * p * ((this._p1 + 1) * p + this._p1) + 1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\"BackIn\", function(p) {\n\t\t\t\t\treturn p * p * ((this._p1 + 1) * p - this._p1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\"BackInOut\", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * p * p * ((this._p2 + 1) * p - this._p2) : 0.5 * ((p -= 2) * p * ((this._p2 + 1) * p + this._p2) + 2);\n\t\t\t\t})\n\t\t\t),\n\n\n\t\t\t//SlowMo\n\t\t\tSlowMo = _class(\"easing.SlowMo\", function(linearRatio, power, yoyoMode) {\n\t\t\t\tpower = (power || power === 0) ? power : 0.7;\n\t\t\t\tif (linearRatio == null) {\n\t\t\t\t\tlinearRatio = 0.7;\n\t\t\t\t} else if (linearRatio > 1) {\n\t\t\t\t\tlinearRatio = 1;\n\t\t\t\t}\n\t\t\t\tthis._p = (linearRatio !== 1) ? power : 0;\n\t\t\t\tthis._p1 = (1 - linearRatio) / 2;\n\t\t\t\tthis._p2 = linearRatio;\n\t\t\t\tthis._p3 = this._p1 + this._p2;\n\t\t\t\tthis._calcEnd = (yoyoMode === true);\n\t\t\t}, true),\n\t\t\tp = SlowMo.prototype = new Ease(),\n\t\t\tSteppedEase, ExpoScaleEase, RoughEase, _createElastic;\n\t\t\t\n\t\tp.constructor = SlowMo;\n\t\tp.getRatio = function(p) {\n\t\t\tvar r = p + (0.5 - p) * this._p;\n\t\t\tif (p < this._p1) {\n\t\t\t\treturn this._calcEnd ? 1 - ((p = 1 - (p / this._p1)) * p) : r - ((p = 1 - (p / this._p1)) * p * p * p * r);\n\t\t\t} else if (p > this._p3) {\n\t\t\t\treturn this._calcEnd ? (p === 1 ? 0 : 1 - (p = (p - this._p3) / this._p1) * p) : r + ((p - r) * (p = (p - this._p3) / this._p1) * p * p * p); //added p === 1 ? 0 to avoid floating point rounding errors from affecting the final value, like 1 - 0.7 = 0.30000000000000004 instead of 0.3\n\t\t\t}\n\t\t\treturn this._calcEnd ? 1 : r;\n\t\t};\n\t\tSlowMo.ease = new SlowMo(0.7, 0.7);\n\t\t\n\t\tp.config = SlowMo.config = function(linearRatio, power, yoyoMode) {\n\t\t\treturn new SlowMo(linearRatio, power, yoyoMode);\n\t\t};\n\n\n\t\t//SteppedEase\n\t\tSteppedEase = _class(\"easing.SteppedEase\", function(steps, immediateStart) {\n\t\t\t\tsteps = steps || 1;\n\t\t\t\tthis._p1 = 1 / steps;\n\t\t\t\tthis._p2 = steps + (immediateStart ? 0 : 1);\n\t\t\t\tthis._p3 = immediateStart ? 1 : 0;\n\t\t\t}, true);\n\t\tp = SteppedEase.prototype = new Ease();\t\n\t\tp.constructor = SteppedEase;\n\t\tp.getRatio = function(p) {\n\t\t\tif (p < 0) {\n\t\t\t\tp = 0;\n\t\t\t} else if (p >= 1) {\n\t\t\t\tp = 0.999999999;\n\t\t\t}\n\t\t\treturn (((this._p2 * p) | 0) + this._p3) * this._p1;\n\t\t};\n\t\tp.config = SteppedEase.config = function(steps, immediateStart) {\n\t\t\treturn new SteppedEase(steps, immediateStart);\n\t\t};\n\n\n\t\t//ExpoScaleEase\n\t\tExpoScaleEase = _class(\"easing.ExpoScaleEase\", function(start, end, ease) {\n\t\t\tthis._p1 = Math.log(end / start);\n\t\t\tthis._p2 = end - start;\n\t\t\tthis._p3 = start;\n\t\t\tthis._ease = ease;\n\t\t}, true);\n\t\tp = ExpoScaleEase.prototype = new Ease();\n\t\tp.constructor = ExpoScaleEase;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._ease) {\n\t\t\t\tp = this._ease.getRatio(p);\n\t\t\t}\n\t\t\treturn (this._p3 * Math.exp(this._p1 * p) - this._p3) / this._p2;\n\t\t};\n\t\tp.config = ExpoScaleEase.config = function(start, end, ease) {\n\t\t\treturn new ExpoScaleEase(start, end, ease);\n\t\t};\n\n\n\t\t//RoughEase\n\t\tRoughEase = _class(\"easing.RoughEase\", function(vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar taper = vars.taper || \"none\",\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tpoints = (vars.points || 20) | 0,\n\t\t\t\ti = points,\n\t\t\t\trandomize = (vars.randomize !== false),\n\t\t\t\tclamp = (vars.clamp === true),\n\t\t\t\ttemplate = (vars.template instanceof Ease) ? vars.template : null,\n\t\t\t\tstrength = (typeof(vars.strength) === \"number\") ? vars.strength * 0.4 : 0.4,\n\t\t\t\tx, y, bump, invX, obj, pnt;\n\t\t\twhile (--i > -1) {\n\t\t\t\tx = randomize ? Math.random() : (1 / points) * i;\n\t\t\t\ty = template ? template.getRatio(x) : x;\n\t\t\t\tif (taper === \"none\") {\n\t\t\t\t\tbump = strength;\n\t\t\t\t} else if (taper === \"out\") {\n\t\t\t\t\tinvX = 1 - x;\n\t\t\t\t\tbump = invX * invX * strength;\n\t\t\t\t} else if (taper === \"in\") {\n\t\t\t\t\tbump = x * x * strength;\n\t\t\t\t} else if (x < 0.5) {  //\"both\" (start)\n\t\t\t\t\tinvX = x * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t} else {\t\t\t\t//\"both\" (end)\n\t\t\t\t\tinvX = (1 - x) * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t}\n\t\t\t\tif (randomize) {\n\t\t\t\t\ty += (Math.random() * bump) - (bump * 0.5);\n\t\t\t\t} else if (i % 2) {\n\t\t\t\t\ty += bump * 0.5;\n\t\t\t\t} else {\n\t\t\t\t\ty -= bump * 0.5;\n\t\t\t\t}\n\t\t\t\tif (clamp) {\n\t\t\t\t\tif (y > 1) {\n\t\t\t\t\t\ty = 1;\n\t\t\t\t\t} else if (y < 0) {\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[cnt++] = {x:x, y:y};\n\t\t\t}\n\t\t\ta.sort(function(a, b) {\n\t\t\t\treturn a.x - b.x;\n\t\t\t});\n\n\t\t\tpnt = new EasePoint(1, 1, null);\n\t\t\ti = points;\n\t\t\twhile (--i > -1) {\n\t\t\t\tobj = a[i];\n\t\t\t\tpnt = new EasePoint(obj.x, obj.y, pnt);\n\t\t\t}\n\n\t\t\tthis._prev = new EasePoint(0, 0, (pnt.t !== 0) ? pnt : pnt.next);\n\t\t}, true);\n\t\tp = RoughEase.prototype = new Ease();\n\t\tp.constructor = RoughEase;\n\t\tp.getRatio = function(p) {\n\t\t\tvar pnt = this._prev;\n\t\t\tif (p > pnt.t) {\n\t\t\t\twhile (pnt.next && p >= pnt.t) {\n\t\t\t\t\tpnt = pnt.next;\n\t\t\t\t}\n\t\t\t\tpnt = pnt.prev;\n\t\t\t} else {\n\t\t\t\twhile (pnt.prev && p <= pnt.t) {\n\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._prev = pnt;\n\t\t\treturn (pnt.v + ((p - pnt.t) / pnt.gap) * pnt.c);\n\t\t};\n\t\tp.config = function(vars) {\n\t\t\treturn new RoughEase(vars);\n\t\t};\n\t\tRoughEase.ease = new RoughEase();\n\n\n\t\t//Bounce\n\t\t_wrap(\"Bounce\",\n\t\t\t_create(\"BounceOut\", function(p) {\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\treturn 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t}\n\t\t\t\treturn 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t}),\n\t\t\t_create(\"BounceIn\", function(p) {\n\t\t\t\tif ((p = 1 - p) < 1 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * p * p);\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n\t\t\t\t}\n\t\t\t\treturn 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n\t\t\t}),\n\t\t\t_create(\"BounceInOut\", function(p) {\n\t\t\t\tvar invert = (p < 0.5);\n\t\t\t\tif (invert) {\n\t\t\t\t\tp = 1 - (p * 2);\n\t\t\t\t} else {\n\t\t\t\t\tp = (p * 2) - 1;\n\t\t\t\t}\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\tp = 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t} else {\n\t\t\t\t\tp = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t}\n\t\t\t\treturn invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n\t\t\t})\n\t\t);\n\n\n\t\t//CIRC\n\t\t_wrap(\"Circ\",\n\t\t\t_create(\"CircOut\", function(p) {\n\t\t\t\treturn Math.sqrt(1 - (p = p - 1) * p);\n\t\t\t}),\n\t\t\t_create(\"CircIn\", function(p) {\n\t\t\t\treturn -(Math.sqrt(1 - (p * p)) - 1);\n\t\t\t}),\n\t\t\t_create(\"CircInOut\", function(p) {\n\t\t\t\treturn ((p*=2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n\t\t\t})\n\t\t);\n\n\n\t\t//Elastic\n\t\t_createElastic = function(n, f, def) {\n\t\t\tvar C = _class(\"easing.\" + n, function(amplitude, period) {\n\t\t\t\t\tthis._p1 = (amplitude >= 1) ? amplitude : 1; //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n\t\t\t\t\tthis._p2 = (period || def) / (amplitude < 1 ? amplitude : 1);\n\t\t\t\t\tthis._p3 = this._p2 / _2PI * (Math.asin(1 / this._p1) || 0);\n\t\t\t\t\tthis._p2 = _2PI / this._p2; //precalculate to optimize\n\t\t\t\t}, true),\n\t\t\t\tp = C.prototype = new Ease();\n\t\t\tp.constructor = C;\n\t\t\tp.getRatio = f;\n\t\t\tp.config = function(amplitude, period) {\n\t\t\t\treturn new C(amplitude, period);\n\t\t\t};\n\t\t\treturn C;\n\t\t};\n\t\t_wrap(\"Elastic\",\n\t\t\t_createElastic(\"ElasticOut\", function(p) {\n\t\t\t\treturn this._p1 * Math.pow(2, -10 * p) * Math.sin( (p - this._p3) * this._p2 ) + 1;\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\"ElasticIn\", function(p) {\n\t\t\t\treturn -(this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2 ));\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\"ElasticInOut\", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? -0.5 * (this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2)) : this._p1 * Math.pow(2, -10 *(p -= 1)) * Math.sin( (p - this._p3) * this._p2 ) * 0.5 + 1;\n\t\t\t}, 0.45)\n\t\t);\n\n\n\t\t//Expo\n\t\t_wrap(\"Expo\",\n\t\t\t_create(\"ExpoOut\", function(p) {\n\t\t\t\treturn 1 - Math.pow(2, -10 * p);\n\t\t\t}),\n\t\t\t_create(\"ExpoIn\", function(p) {\n\t\t\t\treturn Math.pow(2, 10 * (p - 1)) - 0.001;\n\t\t\t}),\n\t\t\t_create(\"ExpoInOut\", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\t\t\t})\n\t\t);\n\n\n\t\t//Sine\n\t\t_wrap(\"Sine\",\n\t\t\t_create(\"SineOut\", function(p) {\n\t\t\t\treturn Math.sin(p * _HALF_PI);\n\t\t\t}),\n\t\t\t_create(\"SineIn\", function(p) {\n\t\t\t\treturn -Math.cos(p * _HALF_PI) + 1;\n\t\t\t}),\n\t\t\t_create(\"SineInOut\", function(p) {\n\t\t\t\treturn -0.5 * (Math.cos(Math.PI * p) - 1);\n\t\t\t})\n\t\t);\n\n\t\t_class(\"easing.EaseLookup\", {\n\t\t\t\tfind:function(s) {\n\t\t\t\t\treturn Ease.map[s];\n\t\t\t\t}\n\t\t\t}, true);\n\n\t\t//register the non-standard eases\n\t\t_easeReg(w.SlowMo, \"SlowMo\", \"ease,\");\n\t\t_easeReg(RoughEase, \"RoughEase\", \"ease,\");\n\t\t_easeReg(SteppedEase, \"SteppedEase\", \"ease,\");\n\t\t\n\t\treturn Back;\n\t\t\n\t}, true);\n\nexport var Back = globals.Back;\nexport var Elastic = globals.Elastic;\nexport var Bounce = globals.Bounce;\nexport var RoughEase = globals.RoughEase;\nexport var SlowMo = globals.SlowMo;\nexport var SteppedEase = globals.SteppedEase;\nexport var Circ = globals.Circ;\nexport var Expo = globals.Expo;\nexport var Sine = globals.Sine;\nexport var ExpoScaleEase = globals.ExpoScaleEase;\nexport { Linear, Power0, Power1, Power2, Power3, Power4 };","/*!\n * VERSION: 1.6.0\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport { _gsScope } from \"./TweenLite.js\";\n\nexport var RoundPropsPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\tpropName: \"roundProps\",\n\t\t\t\tversion: \"1.7.0\",\n\t\t\t\tpriority: -1,\n\t\t\t\tAPI: 2,\n\n\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\tinit: function(target, value, tween) {\n\t\t\t\t\tthis._tween = tween;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t}),\n\t\t\t_getRoundFunc = function(v) { //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\n\t\t\t\tvar p = v < 1 ? Math.pow(10, (v + \"\").length - 2) : 1; //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed()\n\t\t\t\treturn function(n) {\n\t\t\t\t\treturn ((Math.round(n / v) * v * p) | 0) / p;\n\t\t\t\t};\n\t\t\t},\n\t\t\t_roundLinkedList = function(node, mod) {\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (!node.f && !node.blob) {\n\t\t\t\t\t\tnode.m = mod || Math.round;\n\t\t\t\t\t}\n\t\t\t\t\tnode = node._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\tp = RoundPropsPlugin.prototype;\n\n\t\tp._onInitAllProps = function() {\n\t\t\tvar tween = this._tween,\n\t\t\t\trp = tween.vars.roundProps,\n\t\t\t\tlookup = {},\n\t\t\t\trpt = tween._propLookup.roundProps,\n\t\t\t\tpt, next, i, p;\n\t\t\tif (typeof(rp) === \"object\" && !rp.push) {\n\t\t\t\tfor (p in rp) {\n\t\t\t\t\tlookup[p] = _getRoundFunc(rp[p]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeof(rp) === \"string\") {\n\t\t\t\t\trp = rp.split(\",\");\n\t\t\t\t}\n\t\t\t\ti = rp.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlookup[rp[i]] = Math.round;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (p in lookup) {\n\t\t\t\tpt = tween._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next; //record here, because it may get removed\n\t\t\t\t\tif (pt.pg) {\n\t\t\t\t\t\tpt.t._mod(lookup);\n\t\t\t\t\t} else if (pt.n === p) {\n\t\t\t\t\t\tif (pt.f === 2 && pt.t) { //a blob (text containing multiple numeric values)\n\t\t\t\t\t\t\t_roundLinkedList(pt.t._firstPT, lookup[p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._add(pt.t, p, pt.s, pt.c, lookup[p]);\n\t\t\t\t\t\t\t//remove from linked list\n\t\t\t\t\t\t\tif (next) {\n\t\t\t\t\t\t\t\tnext._prev = pt._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\tpt._prev._next = next;\n\t\t\t\t\t\t\t} else if (tween._firstPT === pt) {\n\t\t\t\t\t\t\t\ttween._firstPT = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\ttween._propLookup[p] = rpt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._add = function(target, p, s, c, mod) {\n\t\t\tthis._addTween(target, p, s, s + c, p, mod || Math.round);\n\t\t\tthis._overwriteProps.push(p);\n\t\t};\n\nexport { RoundPropsPlugin as default };\n","/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, Animation, SimpleTimeline } from \"./TweenLite.js\";\n\n_gsScope._gsDefine(\"TimelineLite\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function() {\n\n\t\tvar TimelineLite = function(vars) {\n\t\t\t\tSimpleTimeline.call(this, vars);\n\t\t\t\tvar self = this,\n\t\t\t\t\tv = self.vars,\n\t\t\t\t\tval, p;\n\t\t\t\tself._labels = {};\n\t\t\t\tself.autoRemoveChildren = !!v.autoRemoveChildren;\n\t\t\t\tself.smoothChildTiming = !!v.smoothChildTiming;\n\t\t\t\tself._sortChildren = true;\n\t\t\t\tself._onUpdate = v.onUpdate;\n\t\t\t\tfor (p in v) {\n\t\t\t\t\tval = v[p];\n\t\t\t\t\tif (_isArray(val)) if (val.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tv[p] = self._swapSelfInParams(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_isArray(v.tweens)) {\n\t\t\t\t\tself.add(v.tweens, 0, v.align, v.stagger);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_tinyNum = 0.00000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_internals = TimelineLite._internals = {},\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_copy = function(vars) {\n\t\t\t\tvar copy = {}, p;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\treturn copy;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val(i, targets[i], targets) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\t_pauseCallback = _internals.pauseCallback = function() {},\n\t\t\t_slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_defaultImmediateRender = function(tl, toVars, fromVars, defaultFalse) { //default to immediateRender:true unless otherwise set in toVars, fromVars or if defaultFalse is passed in as true\n\t\t\t\tvar ir = \"immediateRender\";\n\t\t\t\tif (!(ir in toVars)) {\n\t\t\t\t\ttoVars[ir] = !((fromVars && fromVars[ir] === false) || defaultFalse);\n\t\t\t\t}\n\t\t\t\treturn toVars;\n\t\t\t},\n\t\t\t//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\n\t\t\t_distribute = function(v) {\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tvar vars = (typeof(v) === \"object\") ? v : {each:v}, //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \"amount\" that's chunked out among them all.\n\t\t\t\t\tease = vars.ease,\n\t\t\t\t\tfrom = vars.from || 0,\n\t\t\t\t\tbase = vars.base || 0,\n\t\t\t\t\tcache = {},\n\t\t\t\t\tisFromKeyword = isNaN(from),\n\t\t\t\t\taxis = vars.axis,\n\t\t\t\t\tratio = {center:0.5, end:1}[from] || 0;\n\t\t\t\treturn function(i, target, a) {\n\t\t\t\t\tvar l = (a || vars).length,\n\t\t\t\t\t\tdistances = cache[l],\n\t\t\t\t\t\toriginX, originY, x, y, d, j, max, min, wrap;\n\t\t\t\t\tif (!distances) {\n\t\t\t\t\t\twrap = (vars.grid === \"auto\") ? 0 : (vars.grid || [Infinity])[0];\n\t\t\t\t\t\tif (!wrap) {\n\t\t\t\t\t\t\tmax = -Infinity;\n\t\t\t\t\t\t\twhile (max < (max = a[wrap++].getBoundingClientRect().left) && wrap < l) { }\n\t\t\t\t\t\t\twrap--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances = cache[l] = [];\n\t\t\t\t\t\toriginX = isFromKeyword ? (Math.min(wrap, l) * ratio) - 0.5 : from % wrap;\n\t\t\t\t\t\toriginY = isFromKeyword ? l * ratio / wrap - 0.5 : (from / wrap) | 0;\n\t\t\t\t\t\tmax = 0;\n\t\t\t\t\t\tmin = Infinity;\n\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\tx = (j % wrap) - originX;\n\t\t\t\t\t\t\ty = originY - ((j / wrap) | 0);\n\t\t\t\t\t\t\tdistances[j] = d = !axis ? Math.sqrt(x * x + y * y) : Math.abs((axis === \"y\") ? y : x);\n\t\t\t\t\t\t\tif (d > max) {\n\t\t\t\t\t\t\t\tmax = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (d < min) {\n\t\t\t\t\t\t\t\tmin = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances.max = max - min;\n\t\t\t\t\t\tdistances.min = min;\n\t\t\t\t\t\tdistances.v = l = vars.amount || (vars.each * (wrap > l ? l - 1 : !axis ? Math.max(wrap, l / wrap) : axis === \"y\" ? l / wrap : wrap)) || 0;\n\t\t\t\t\t\tdistances.b = (l < 0) ? base - l : base;\n\t\t\t\t\t}\n\t\t\t\t\tl = (distances[i] - distances.min) / distances.max;\n\t\t\t\t\treturn distances.b + (ease ? ease.getRatio(l) : l) * distances.v;\n\t\t\t\t};\n\t\t\t},\n\t\t\tp = TimelineLite.prototype = new SimpleTimeline();\n\n\t\tTimelineLite.version = \"2.1.3\";\n\t\tTimelineLite.distribute = _distribute;\n\t\tp.constructor = TimelineLite;\n\t\tp.kill()._gc = p._forcingPlayhead = p._hasPause = false;\n\n\t\t/* might use later...\n\t\t//translates a local time inside an animation to the corresponding time on the root/global timeline, factoring in all nesting and timeScales.\n\t\tfunction localToGlobal(time, animation) {\n\t\t\twhile (animation) {\n\t\t\t\ttime = (time / animation._timeScale) + animation._startTime;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time;\n\t\t}\n\n\t\t//translates the supplied time on the root/global timeline into the corresponding local time inside a particular animation, factoring in all nesting and timeScales\n\t\tfunction globalToLocal(time, animation) {\n\t\t\tvar scale = 1;\n\t\t\ttime -= localToGlobal(0, animation);\n\t\t\twhile (animation) {\n\t\t\t\tscale *= animation._timeScale;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time * scale;\n\t\t}\n\t\t*/\n\n\t\tp.to = function(target, duration, vars, position) {\n\t\t\tvar Engine = (vars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\treturn duration ? this.add( new Engine(target, duration, vars), position) : this.set(target, vars, position);\n\t\t};\n\n\t\tp.from = function(target, duration, vars, position) {\n\t\t\treturn this.add( ((vars.repeat && _globals.TweenMax) || TweenLite).from(target, duration, _defaultImmediateRender(this, vars)), position);\n\t\t};\n\n\t\tp.fromTo = function(target, duration, fromVars, toVars, position) {\n\t\t\tvar Engine = (toVars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\ttoVars = _defaultImmediateRender(this, toVars, fromVars);\n\t\t\treturn duration ? this.add( Engine.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position);\n\t\t};\n\n\t\tp.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvar tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, callbackScope:onCompleteAllScope, smoothChildTiming:this.smoothChildTiming}),\n\t\t\t\tstaggerFunc = _distribute(vars.stagger || stagger),\n\t\t\t\tstartAt = vars.startAt,\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tcopy, i;\n\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tif (_isSelector(targets)) { //if the targets object is a selector, translate it into an array.\n\t\t\t\ttargets = _slice(targets);\n\t\t\t}\n\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\tcopy = _copy(vars);\n\t\t\t\tif (startAt) {\n\t\t\t\t\tcopy.startAt = _copy(startAt);\n\t\t\t\t\tif (startAt.cycle) {\n\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttl.to(targets[i], duration, copy, staggerFunc(i, targets[i], targets));\n\t\t\t}\n\t\t\treturn this.add(tl, position);\n\t\t};\n\n\t\tp.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.runBackwards = true;\n\t\t\treturn this.staggerTo(targets, duration, _defaultImmediateRender(this, vars), stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\treturn this.staggerTo(targets, duration, _defaultImmediateRender(this, toVars, fromVars), stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.call = function(callback, params, scope, position) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.set = function(target, vars, position) {\n\t\t\treturn this.add( new TweenLite(target, 0, _defaultImmediateRender(this, vars, null, true)), position);\n\t\t};\n\n\t\tTimelineLite.exportRoot = function(vars, ignoreDelayedCalls) {\n\t\t\tvars = vars || {};\n\t\t\tif (vars.smoothChildTiming == null) {\n\t\t\t\tvars.smoothChildTiming = true;\n\t\t\t}\n\t\t\tvar tl = new TimelineLite(vars),\n\t\t\t\troot = tl._timeline,\n\t\t\t\thasNegativeStart, time,\ttween, next;\n\t\t\tif (ignoreDelayedCalls == null) {\n\t\t\t\tignoreDelayedCalls = true;\n\t\t\t}\n\t\t\troot._remove(tl, true);\n\t\t\ttl._startTime = 0;\n\t\t\ttl._rawPrevTime = tl._time = tl._totalTime = root._time;\n\t\t\ttween = root._first;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next;\n\t\t\t\tif (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) {\n\t\t\t\t\ttime = tween._startTime - tween._delay;\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\thasNegativeStart = 1;\n\t\t\t\t\t}\n\t\t\t\t\ttl.add(tween, time);\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t\troot.add(tl, 0);\n\t\t\tif (hasNegativeStart) { //calling totalDuration() will force the adjustment necessary to shift the children forward so none of them start before zero, and moves the timeline backwards the same amount, so the playhead is still aligned where it should be globally, but the timeline doesn't have illegal children that start before zero.\n\t\t\t\ttl.totalDuration();\n\t\t\t}\n\t\t\treturn tl;\n\t\t};\n\n\t\tp.add = function(value, position, align, stagger) {\n\t\t\tvar self = this,\n\t\t\t\tcurTime, l, i, child, tl, beforeRawTime;\n\t\t\tif (typeof(position) !== \"number\") {\n\t\t\t\tposition = self._parseTimeOrLabel(position, 0, true, value);\n\t\t\t}\n\t\t\tif (!(value instanceof Animation)) {\n\t\t\t\tif ((value instanceof Array) || (value && value.push && _isArray(value))) {\n\t\t\t\t\talign = align || \"normal\";\n\t\t\t\t\tstagger = stagger || 0;\n\t\t\t\t\tcurTime = position;\n\t\t\t\t\tl = value.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif (_isArray(child = value[i])) {\n\t\t\t\t\t\t\tchild = new TimelineLite({tweens:child});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.add(child, curTime);\n\t\t\t\t\t\tif (typeof(child) !== \"string\" && typeof(child) !== \"function\") {\n\t\t\t\t\t\t\tif (align === \"sequence\") {\n\t\t\t\t\t\t\t\tcurTime = child._startTime + (child.totalDuration() / child._timeScale);\n\t\t\t\t\t\t\t} else if (align === \"start\") {\n\t\t\t\t\t\t\t\tchild._startTime -= child.delay();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurTime += stagger;\n\t\t\t\t\t}\n\t\t\t\t\treturn self._uncache(true);\n\t\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\t\treturn self.addLabel(value, position);\n\t\t\t\t} else if (typeof(value) === \"function\") {\n\t\t\t\t\tvalue = TweenLite.delayedCall(0, value);\n\t\t\t\t} else {\n\t\t\t\t\tthrow(\"Cannot add \" + value + \" into the timeline; it is not a tween, timeline, function, or string.\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tSimpleTimeline.prototype.add.call(self, value, position);\n\n\t\t\tif (value._time || (!value._duration && value._initted)) { //in case, for example, the _startTime is moved on a tween that has already rendered. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning.\n\t\t\t\tcurTime = (self.rawTime() - value._startTime) * value._timeScale;\n\t\t\t\tif (!value._duration || Math.abs(Math.max(0, Math.min(value.totalDuration(), curTime))) - value._totalTime > 0.00001) {\n\t\t\t\t\tvalue.render(curTime, false, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\t\t\tif (self._gc || self._time === self._duration) if (!self._paused) if (self._duration < self.duration()) {\n\t\t\t\t//in case any of the ancestors had completed but should now be enabled...\n\t\t\t\ttl = self;\n\t\t\t\tbeforeRawTime = (tl.rawTime() > value._startTime); //if the tween is placed on the timeline so that it starts BEFORE the current rawTime, we should align the playhead (move the timeline). This is because sometimes users will create a timeline, let it finish, and much later append a tween and expect it to run instead of jumping to its end state. While technically one could argue that it should jump to its end state, that's not what users intuitively expect.\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tif (beforeRawTime && tl._timeline.smoothChildTiming) {\n\t\t\t\t\t\ttl.totalTime(tl._totalTime, true); //moves the timeline (shifts its startTime) if necessary, and also enables it.\n\t\t\t\t\t} else if (tl._gc) {\n\t\t\t\t\t\ttl._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self;\n\t\t};\n\n\t\tp.remove = function(value) {\n\t\t\tif (value instanceof Animation) {\n\t\t\t\tthis._remove(value, false);\n\t\t\t\tvar tl = value._timeline = value.vars.useFrames ? Animation._rootFramesTimeline : Animation._rootTimeline; //now that it's removed, default it to the root timeline so that if it gets played again, it doesn't jump back into this timeline.\n\t\t\t\tvalue._startTime = (value._paused ? value._pauseTime : tl._time) - ((!value._reversed ? value._totalTime : value.totalDuration() - value._totalTime) / value._timeScale); //ensure that if it gets played again, the timing is correct.\n\t\t\t\treturn this;\n\t\t\t} else if (value instanceof Array || (value && value.push && _isArray(value))) {\n\t\t\t\tvar i = value.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tthis.remove(value[i]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t} else if (typeof(value) === \"string\") {\n\t\t\t\treturn this.removeLabel(value);\n\t\t\t}\n\t\t\treturn this.kill(null, value);\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tSimpleTimeline.prototype._remove.call(this, tween, skipDisable);\n\t\t\tvar last = this._last;\n\t\t\tif (!last) {\n\t\t\t\tthis._time = this._totalTime = this._duration = this._totalDuration = 0;\n\t\t\t} else if (this._time > this.duration()) {\n\t\t\t\tthis._time = this._duration;\n\t\t\t\tthis._totalTime = this._totalDuration;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.append = function(value, offsetOrLabel) {\n\t\t\treturn this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value));\n\t\t};\n\n\t\tp.insert = p.insertMultiple = function(value, position, align, stagger) {\n\t\t\treturn this.add(value, position || 0, align, stagger);\n\t\t};\n\n\t\tp.appendMultiple = function(tweens, offsetOrLabel, align, stagger) {\n\t\t\treturn this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger);\n\t\t};\n\n\t\tp.addLabel = function(label, position) {\n\t\t\tthis._labels[label] = this._parseTimeOrLabel(position);\n\t\t\treturn this;\n\t\t};\n\n\t\tp.addPause = function(position, callback, params, scope) {\n\t\t\tvar t = TweenLite.delayedCall(0, _pauseCallback, params, scope || this);\n\t\t\tt.vars.onComplete = t.vars.onReverseComplete = callback;\n\t\t\tt.data = \"isPause\";\n\t\t\tthis._hasPause = true;\n\t\t\treturn this.add(t, position);\n\t\t};\n\n\t\tp.removeLabel = function(label) {\n\t\t\tdelete this._labels[label];\n\t\t\treturn this;\n\t\t};\n\n\t\tp.getLabelTime = function(label) {\n\t\t\treturn (this._labels[label] != null) ? this._labels[label] : -1;\n\t\t};\n\n\t\tp._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) {\n\t\t\tvar clippedDuration, i;\n\t\t\t//if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration().\n\t\t\tif (ignore instanceof Animation && ignore.timeline === this) {\n\t\t\t\tthis.remove(ignore);\n\t\t\t} else if (ignore && ((ignore instanceof Array) || (ignore.push && _isArray(ignore)))) {\n\t\t\t\ti = ignore.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (ignore[i] instanceof Animation && ignore[i].timeline === this) {\n\t\t\t\t\t\tthis.remove(ignore[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tclippedDuration = (typeof(timeOrLabel) === \"number\" && !offsetOrLabel) ? 0 : (this.duration() > 99999999999) ? this.recent().endTime(false) : this._duration; //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\n\t\t\tif (typeof(offsetOrLabel) === \"string\") {\n\t\t\t\treturn this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === \"number\" && this._labels[offsetOrLabel] == null) ? timeOrLabel - clippedDuration : 0, appendIfAbsent);\n\t\t\t}\n\t\t\toffsetOrLabel = offsetOrLabel || 0;\n\t\t\tif (typeof(timeOrLabel) === \"string\" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n\t\t\t\ti = timeOrLabel.indexOf(\"=\");\n\t\t\t\tif (i === -1) {\n\t\t\t\t\tif (this._labels[timeOrLabel] == null) {\n\t\t\t\t\t\treturn appendIfAbsent ? (this._labels[timeOrLabel] = clippedDuration + offsetOrLabel) : offsetOrLabel;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._labels[timeOrLabel] + offsetOrLabel;\n\t\t\t\t}\n\t\t\t\toffsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + \"1\", 10) * Number(timeOrLabel.substr(i+1));\n\t\t\t\ttimeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : clippedDuration;\n\t\t\t} else if (timeOrLabel == null) {\n\t\t\t\ttimeOrLabel = clippedDuration;\n\t\t\t}\n\t\t\treturn Number(timeOrLabel) + offsetOrLabel;\n\t\t};\n\n\t\tp.seek = function(position, suppressEvents) {\n\t\t\treturn this.totalTime((typeof(position) === \"number\") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false));\n\t\t};\n\n\t\tp.stop = function() {\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.gotoAndPlay = function(position, suppressEvents) {\n\t\t\treturn this.play(position, suppressEvents);\n\t\t};\n\n\t\tp.gotoAndStop = function(position, suppressEvents) {\n\t\t\treturn this.pause(position, suppressEvents);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\ttotalDur = (!self._dirty) ? self._totalDuration : self.totalDuration(),\n\t\t\t\tprevStart = self._startTime,\n\t\t\t\tprevTimeScale = self._timeScale,\n\t\t\t\tprevPaused = self._paused,\n\t\t\t\ttween, isComplete, next, callback, internalForce, pauseTween, curTime, pauseTime;\n\t\t\tif (prevTime !== self._time) { //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n\t\t\t\ttime += self._time - prevTime;\n\t\t\t}\n\t\t\tif (self._hasPause && !self._forcingPlayhead && !suppressEvents) {\n\t\t\t\tif (time > prevTime) {\n\t\t\t\t\ttween = self._first;\n\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && self._rawPrevTime === 0)) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = self._last;\n\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pauseTween) {\n\t\t\t\t\tself._time = self._totalTime = time = pauseTween._startTime;\n\t\t\t\t\tpauseTime = self._startTime + (self._reversed ? self._duration - time : time) / self._timeScale;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (time >= totalDur - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = self._time = totalDur;\n\t\t\t\tif (!self._reversed) if (!self._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tinternalForce = !!self._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (self._duration === 0) if ((time <= 0 && time >= -_tinyNum) || self._rawPrevTime < 0 || self._rawPrevTime === _tinyNum) if (self._rawPrevTime !== time && self._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (self._rawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself._rawPrevTime = (self._duration || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\ttime = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = 0;\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t}\n\t\t\t\tif (prevTime !== 0 || (self._duration === 0 && self._rawPrevTime !== _tinyNum && (self._rawPrevTime > 0 || (time < 0 && self._rawPrevTime >= 0)))) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (self._timeline.autoRemoveChildren && self._reversed) { //ensures proper GC if a timeline is resumed after it's finished reversing.\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t} else if (self._rawPrevTime >= 0 && self._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tself._rawPrevTime = (self._duration || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = self._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!self._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = self._rawPrevTime = time;\n\t\t\t}\n\t\t\tif ((self._time === prevTime || !self._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._initted = true;\n\t\t\t}\n\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time > 0) {\n\t\t\t\tself._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTime === 0) if (self.vars.onStart) if (self._time !== 0 || !self._duration) if (!suppressEvents) {\n\t\t\t\tself._callback(\"onStart\");\n\t\t\t}\n\n\t\t\tcurTime = self._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = self._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= curTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = self._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > self._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t}\n\n\t\t\tif (callback) if (!self._gc) if (prevStart === self._startTime || prevTimeScale !== self._timeScale) if (self._time === 0 || totalDur >= self.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._hasPausedChild = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || -9999999999;\n\t\t\tvar a = [],\n\t\t\t\ttween = this._first,\n\t\t\t\tcnt = 0;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime < ignoreBeforeTime) {\n\t\t\t\t\t//do nothing\n\t\t\t\t} else if (tween instanceof TweenLite) {\n\t\t\t\t\tif (tweens !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (timelines !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t\tif (nested !== false) {\n\t\t\t\t\t\ta = a.concat(tween.getChildren(true, tweens, timelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.getTweensOf = function(target, nested) {\n\t\t\tvar disabled = this._gc,\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\ttweens, i;\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(true, true); //getTweensOf() filters out disabled tweens, and we have to mark them as _gc = true when the timeline completes in order to allow clean garbage collection, so temporarily re-enable the timeline here.\n\t\t\t}\n\t\t\ttweens = TweenLite.getTweensOf(target);\n\t\t\ti = tweens.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) {\n\t\t\t\t\ta[cnt++] = tweens[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(false, true);\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.recent = function() {\n\t\t\treturn this._recent;\n\t\t};\n\n\t\tp._contains = function(tween) {\n\t\t\tvar tl = tween.timeline;\n\t\t\twhile (tl) {\n\t\t\t\tif (tl === this) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttl = tl.timeline;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || 0;\n\t\t\tvar tween = this._first,\n\t\t\t\tlabels = this._labels,\n\t\t\t\tp;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime >= ignoreBeforeTime) {\n\t\t\t\t\ttween._startTime += amount;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\tif (adjustLabels) {\n\t\t\t\tfor (p in labels) {\n\t\t\t\t\tif (labels[p] >= ignoreBeforeTime) {\n\t\t\t\t\t\tlabels[p] += amount;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp._kill = function(vars, target) {\n\t\t\tif (!vars && !target) {\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\tvar tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target),\n\t\t\t\ti = tweens.length,\n\t\t\t\tchanged = false;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i]._kill(vars, target)) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.clear = function(labels) {\n\t\t\tvar tweens = this.getChildren(false, true, true),\n\t\t\t\ti = tweens.length;\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttweens[i]._enabled(false, false);\n\t\t\t}\n\t\t\tif (labels !== false) {\n\t\t\t\tthis._labels = {};\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\ttween.invalidate();\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn Animation.prototype.invalidate.call(this);;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (enabled === this._gc) {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween._enabled(enabled, true);\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tthis._forcingPlayhead = true;\n\t\t\tvar val = Animation.prototype.totalTime.apply(this, arguments);\n\t\t\tthis._forcingPlayhead = false;\n\t\t\treturn val;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration(); //just triggers recalculation\n\t\t\t\t}\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tif (this.duration() !== 0 && value !== 0) {\n\t\t\t\tthis.timeScale(this._duration / value);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tvar max = 0,\n\t\t\t\t\t\tself = this,\n\t\t\t\t\t\ttween = self._last,\n\t\t\t\t\t\tprevStart = 999999999999,\n\t\t\t\t\t\tprev, end;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tprev = tween._prev; //record it here in case the tween changes position in the sequence...\n\t\t\t\t\t\tif (tween._dirty) {\n\t\t\t\t\t\t\ttween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime > prevStart && self._sortChildren && !tween._paused && !self._calculatingDuration) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n\t\t\t\t\t\t\tself._calculatingDuration = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add(), like _parseTimeOrLabel().\n\t\t\t\t\t\t\tself.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t\t\tself._calculatingDuration = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprevStart = tween._startTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n\t\t\t\t\t\t\tmax -= tween._startTime;\n\t\t\t\t\t\t\tif (self._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\t\tself._startTime += tween._startTime / self._timeScale;\n\t\t\t\t\t\t\t\tself._time -= tween._startTime;\n\t\t\t\t\t\t\t\tself._totalTime -= tween._startTime;\n\t\t\t\t\t\t\t\tself._rawPrevTime -= tween._startTime;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.shiftChildren(-tween._startTime, false, -9999999999);\n\t\t\t\t\t\t\tprevStart = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tend = tween._startTime + (tween._totalDuration / tween._timeScale);\n\t\t\t\t\t\tif (end > max) {\n\t\t\t\t\t\t\tmax = end;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = prev;\n\t\t\t\t\t}\n\t\t\t\t\tself._duration = self._totalDuration = max;\n\t\t\t\t\tself._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (value && this.totalDuration()) ? this.timeScale(this._totalDuration / value) : this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (value === false && this._paused) { //if there's a pause directly at the spot from where we're unpausing, skip it.\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime === this._time && tween.data === \"isPause\") {\n\t\t\t\t\t\ttween._rawPrevTime = 0; //remember, _rawPrevTime is how zero-duration tweens/callbacks sense directionality and determine whether or not to fire. If _rawPrevTime is the same as _startTime on the next render, it won't fire.\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Animation.prototype.paused.apply(this, arguments);\n\t\t};\n\n\t\tp.usesFrames = function() {\n\t\t\tvar tl = this._timeline;\n\t\t\twhile (tl._timeline) {\n\t\t\t\ttl = tl._timeline;\n\t\t\t}\n\t\t\treturn (tl === Animation._rootFramesTimeline);\n\t\t};\n\n\t\tp.rawTime = function(wrapRepeats) {\n\t\t\treturn (wrapRepeats && (this._paused || (this._repeat && this.time() > 0 && this.totalProgress() < 1))) ? this._totalTime % (this._duration + this._repeatDelay) : this._paused ? this._totalTime : (this._timeline.rawTime(wrapRepeats) - this._startTime) * this._timeScale;\n\t\t};\n\n\t\treturn TimelineLite;\n\n\t}, true);\n\nexport var TimelineLite = globals.TimelineLite;\nexport { TimelineLite as default };\n","/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, Ease, Animation } from \"./TweenLite.js\";\nimport TimelineLite from \"./TimelineLite.js\";\n\n_gsScope._gsDefine(\"TimelineMax\", [\"TimelineLite\",\"TweenLite\",\"easing.Ease\"], function() {\n\t\t\n\t\tvar TimelineMax = function(vars) {\n\t\t\t\tTimelineLite.call(this, vars);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = !!this.vars.yoyo;\n\t\t\t\tthis._dirty = true;\n\t\t\t},\n\t\t\t_tinyNum = 0.00000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_easeNone = new Ease(null, null, 1, 0),\n\t\t\tp = TimelineMax.prototype = new TimelineLite();\n\n\t\tp.constructor = TimelineMax;\n\t\tp.kill()._gc = false;\n\t\tTimelineMax.version = \"2.1.3\";\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = !!this.vars.yoyo;\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._uncache(true);\n\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t};\n\n\t\tp.addCallback = function(callback, position, params, scope) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.removeCallback = function(callback, position) {\n\t\t\tif (callback) {\n\t\t\t\tif (position == null) {\n\t\t\t\t\tthis._kill(null, callback);\n\t\t\t\t} else {\n\t\t\t\t\tvar a = this.getTweensOf(callback, false),\n\t\t\t\t\t\ti = a.length,\n\t\t\t\t\t\ttime = this._parseTimeOrLabel(position);\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i]._startTime === time) {\n\t\t\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.removePause = function(position) {\n\t\t\treturn this.removeCallback(TimelineLite._internals.pauseCallback, position);\n\t\t};\n\n\t\tp.tweenTo = function(position, vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar copy = {ease:_easeNone, useFrames:this.usesFrames(), immediateRender:false, lazy:false},\n\t\t\t\tEngine = (vars.repeat && _globals.TweenMax) || TweenLite,\n\t\t\t\tduration, p, t;\n\t\t\tfor (p in vars) {\n\t\t\t\tcopy[p] = vars[p];\n\t\t\t}\n\t\t\tcopy.time = this._parseTimeOrLabel(position);\n\t\t\tduration = (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001;\n\t\t\tt = new Engine(this, duration, copy);\n\t\t\tcopy.onStart = function() {\n\t\t\t\tt.target.paused(true);\n\t\t\t\tif (t.vars.time !== t.target.time() && duration === t.duration() && !t.isFromTo) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all.\n\t\t\t\t\tt.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale ).render(t.time(), true, true); //render() right away to ensure that things look right, especially in the case of .tweenTo(0).\n\t\t\t\t}\n\t\t\t\tif (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it.\n\t\t\t\t\tvars.onStart.apply(vars.onStartScope || vars.callbackScope || t, vars.onStartParams || []); //don't use t._callback(\"onStart\") or it'll point to the copy.onStart and we'll get a recursion error.\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn t;\n\t\t};\n\n\t\tp.tweenFromTo = function(fromPosition, toPosition, vars) {\n\t\t\tvars = vars || {};\n\t\t\tfromPosition = this._parseTimeOrLabel(fromPosition);\n\t\t\tvars.startAt = {onComplete:this.seek, onCompleteParams:[fromPosition], callbackScope:this};\n\t\t\tvars.immediateRender = (vars.immediateRender !== false);\n\t\t\tvar t = this.tweenTo(toPosition, vars);\n\t\t\tt.isFromTo = 1; //to ensure we don't mess with the duration in the onStart (we've got the start and end values here, so lock it in)\n\t\t\treturn t.duration((Math.abs( t.vars.time - fromPosition) / this._timeScale) || 0.001);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\ttotalDur = (!self._dirty) ? self._totalDuration : self.totalDuration(),\n\t\t\t\tdur = self._duration,\n\t\t\t\tprevTotalTime = self._totalTime,\n\t\t\t\tprevStart = self._startTime,\n\t\t\t\tprevTimeScale = self._timeScale,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tprevPaused = self._paused,\n\t\t\t\tprevCycle = self._cycle,\n\t\t\t\ttween, isComplete, next, callback, internalForce, cycleDuration, pauseTween, curTime, pauseTime;\n\t\t\tif (prevTime !== self._time) { //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n\t\t\t\ttime += self._time - prevTime;\n\t\t\t}\n\t\t\tif (time >= totalDur - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tif (!self._locked) {\n\t\t\t\t\tself._totalTime = totalDur;\n\t\t\t\t\tself._cycle = self._repeat;\n\t\t\t\t}\n\t\t\t\tif (!self._reversed) if (!self._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tinternalForce = !!self._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (self._duration === 0) if ((time <= 0 && time >= -_tinyNum) || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time && self._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself._rawPrevTime = (self._duration || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\tif (self._yoyo && (self._cycle & 1)) {\n\t\t\t\t\tself._time = time = 0;\n\t\t\t\t} else {\n\t\t\t\t\tself._time = dur;\n\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7. We cannot do less then 0.0001 because the same issue can occur when the duration is extremely large like 999999999999 in which case adding 0.00000001, for example, causes it to act like nothing was added.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tif (!self._locked) {\n\t\t\t\t\tself._totalTime = self._cycle = 0;\n\t\t\t\t}\n\t\t\t\tself._time = 0;\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t}\n\t\t\t\tif (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !self._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (self._timeline.autoRemoveChildren && self._reversed) {\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t} else if (prevRawPrevTime >= 0 && self._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tself._rawPrevTime = (dur || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = self._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!self._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tif (dur === 0 && prevRawPrevTime < 0) { //without this, zero-duration repeating timelines (like with a simple callback nested at the very beginning and a repeatDelay) wouldn't render the first time through.\n\t\t\t\t\tinternalForce = true;\n\t\t\t\t}\n\t\t\t\tself._time = self._rawPrevTime = time;\n\t\t\t\tif (!self._locked) {\n\t\t\t\t\tself._totalTime = time;\n\t\t\t\t\tif (self._repeat !== 0) {\n\t\t\t\t\t\tcycleDuration = dur + self._repeatDelay;\n\t\t\t\t\t\tself._cycle = (self._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but it gets reported as 0.79999999!)\n\t\t\t\t\t\tif (self._cycle) if (self._cycle === self._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\tself._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._time = self._totalTime - (self._cycle * cycleDuration);\n\t\t\t\t\t\tif (self._yoyo) if (self._cycle & 1) {\n\t\t\t\t\t\t\tself._time = dur - self._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (self._time > dur) {\n\t\t\t\t\t\t\tself._time = dur;\n\t\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding error\n\t\t\t\t\t\t} else if (self._time < 0) {\n\t\t\t\t\t\t\tself._time = time = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttime = self._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._hasPause && !self._forcingPlayhead && !suppressEvents) {\n\t\t\t\ttime = self._time;\n\t\t\t\tif (time > prevTime || (self._repeat && prevCycle !== self._cycle)) {\n\t\t\t\t\ttween = self._first;\n\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && !tween.ratio && !(tween._startTime === 0 && self._rawPrevTime === 0)) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = self._last;\n\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \"isPause\" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pauseTween) {\n\t\t\t\t\tpauseTime = self._startTime + (self._reversed ? self._duration - pauseTween._startTime : pauseTween._startTime) / self._timeScale;\n\t\t\t\t\tif (pauseTween._startTime < dur) {\n\t\t\t\t\t\tself._time = self._rawPrevTime = time = pauseTween._startTime;\n\t\t\t\t\t\tself._totalTime = time + (self._cycle * (self._totalDuration + self._repeatDelay));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._cycle !== prevCycle) if (!self._locked) {\n\t\t\t\t/*\n\t\t\t\tmake sure children at the end/beginning of the timeline are rendered properly. If, for example,\n\t\t\t\ta 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n\t\t\t\twould get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n\t\t\t\tcould be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n\t\t\t\twe need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n\t\t\t\tensure that zero-duration tweens at the very beginning or end of the TimelineMax work.\n\t\t\t\t*/\n\t\t\t\tvar backwards = (self._yoyo && (prevCycle & 1) !== 0),\n\t\t\t\t\twrap = (backwards === (self._yoyo && (self._cycle & 1) !== 0)),\n\t\t\t\t\trecTotalTime = self._totalTime,\n\t\t\t\t\trecCycle = self._cycle,\n\t\t\t\t\trecRawPrevTime = self._rawPrevTime,\n\t\t\t\t\trecTime = self._time;\n\n\t\t\t\tself._totalTime = prevCycle * dur;\n\t\t\t\tif (self._cycle < prevCycle) {\n\t\t\t\t\tbackwards = !backwards;\n\t\t\t\t} else {\n\t\t\t\t\tself._totalTime += dur;\n\t\t\t\t}\n\t\t\t\tself._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a \"cleaner\" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method.\n\n\t\t\t\tself._rawPrevTime = (dur === 0) ? prevRawPrevTime - 0.0001 : prevRawPrevTime;\n\t\t\t\tself._cycle = prevCycle;\n\t\t\t\tself._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render()\n\t\t\t\tprevTime = (backwards) ? 0 : dur;\n\t\t\t\tself.render(prevTime, suppressEvents, (dur === 0));\n\t\t\t\tif (!suppressEvents) if (!self._gc) {\n\t\t\t\t\tif (self.vars.onRepeat) {\n\t\t\t\t\t\tself._cycle = recCycle; //in case the onRepeat alters the playhead or invalidates(), we shouldn't stay locked or use the previous cycle.\n\t\t\t\t\t\tself._locked = false;\n\t\t\t\t\t\tself._callback(\"onRepeat\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (prevTime !== self._time) { //in case there's a callback like onComplete in a nested tween/timeline that changes the playhead position, like via seek(), we should just abort.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (wrap) {\n\t\t\t\t\tself._cycle = prevCycle; //if there's an onRepeat, we reverted this above, so make sure it's set properly again. We also unlocked in that scenario, so reset that too.\n\t\t\t\t\tself._locked = true;\n\t\t\t\t\tprevTime = (backwards) ? dur + 0.0001 : -0.0001;\n\t\t\t\t\tself.render(prevTime, true, false);\n\t\t\t\t}\n\t\t\t\tself._locked = false;\n\t\t\t\tif (self._paused && !prevPaused) { //if the render() triggered callback that paused this timeline, we should abort (very rare, but possible)\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tself._time = recTime;\n\t\t\t\tself._totalTime = recTotalTime;\n\t\t\t\tself._cycle = recCycle;\n\t\t\t\tself._rawPrevTime = recRawPrevTime;\n\t\t\t}\n\n\t\t\tif ((self._time === prevTime || !self._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\tif (prevTotalTime !== self._totalTime) if (self._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._initted = true;\n\t\t\t}\n\n\t\t\tif (!self._active) if (!self._paused && self._totalTime !== prevTotalTime && time > 0) {\n\t\t\t\tself._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTotalTime === 0) if (self.vars.onStart) if (self._totalTime !== 0 || !self._totalDuration) if (!suppressEvents) {\n\t\t\t\tself._callback(\"onStart\");\n\t\t\t}\n\n\t\t\tcurTime = self._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = self._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= self._time && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = self._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > self._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t}\n\t\t\tif (callback) if (!self._locked) if (!self._gc) if (prevStart === self._startTime || prevTimeScale !== self._timeScale) if (self._time === 0 || totalDur >= self.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.getActive = function(nested, tweens, timelines) {\n\t\t\tvar a = [],\n\t\t\t\tall = this.getChildren(nested || (nested == null), tweens || (nested == null), !!timelines),\n\t\t\t\tcnt = 0,\n\t\t\t\tl = all.length,\n\t\t\t\ti, tween;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = all[i];\n\t\t\t\tif (tween.isActive()) {\n\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\n\t\tp.getLabelAfter = function(time) {\n\t\t\tif (!time) if (time !== 0) { //faster than isNan()\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\tl = labels.length,\n\t\t\t\ti;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (labels[i].time > time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelBefore = function(time) {\n\t\t\tif (time == null) {\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\ti = labels.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (labels[i].time < time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelsArray = function() {\n\t\t\tvar a = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tp;\n\t\t\tfor (p in this._labels) {\n\t\t\t\ta[cnt++] = {time:this._labels[p], name:p};\n\t\t\t}\n\t\t\ta.sort(function(a,b) {\n\t\t\t\treturn a.time - b.time;\n\t\t\t});\n\t\t\treturn a;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._locked = false; //unlock and set cycle in case invalidate() is called from inside an onRepeat\n\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t};\n\n\n//---- GETTERS / SETTERS -------------------------------------------------------------------------------------------------------\n\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? (this._time / this.duration()) || 0 : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? (this._totalTime / this.totalDuration()) || 0 : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tTimelineLite.prototype.totalDuration.call(this); //just forces refresh\n\t\t\t\t\t//Instead of Infinity, we use 999999999999 so that we can accommodate reverses.\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1 || !value) ? this : this.timeScale( this.totalDuration() / value );\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tvar duration = this._duration,\n\t\t\t\tcycle = this._cycle,\n\t\t\t\tcycleDur = cycle * (duration + this._repeatDelay);\n\t\t\tif (value > duration) {\n\t\t\t\tvalue = duration;\n\t\t\t}\n\t\t\treturn this.totalTime((this._yoyo && (cycle & 1)) ? duration - value + cycleDur : this._repeat ? value + cycleDur : value, suppressEvents);\n\t\t};\n\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.currentLabel = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.getLabelBefore(this._time + _tinyNum);\n\t\t\t}\n\t\t\treturn this.seek(value, true);\n\t\t};\n\t\t\n\t\treturn TimelineMax;\n\t\t\n\t}, true);\n\nexport var TimelineMax = globals.TimelineMax;\nexport { TimelineLite, TimelineMax as default };","/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\n/* ES6 changes:\n\t- declare and export _gsScope at top.\n\t- set var TweenLite = the result of the main function\n\t- export default TweenLite at the bottom\n\t- return TweenLite at the bottom of the main function\n\t- pass in _gsScope as the first parameter of the main function (which is actually at the bottom)\n\t- remove the \"export to multiple environments\" in Definition().\n */\nexport var _gsScope = (typeof(window) !== \"undefined\") ? window : (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : this || {};\n\nexport var TweenLite = (function(window) {\n\n\t\t\"use strict\";\n\t\tvar _exports = {},\n\t\t\t_doc = window.document,\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn _globals.TweenLite; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t_tinyNum = 0.00000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * <script>\n\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t * </script>\n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tif (typeof(module) !== \"undefined\" && module.exports) { //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof(define) === \"function\" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \"/\" : \"\") + ns.split(\".\").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t}\n\n\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\tif (!arguments.length) { //if lagSmoothing() is called with no arguments, treat it like a getter that returns a boolean indicating if it's enabled or not. This is purposely undocumented and is for internal use.\n\t\t\t\t\treturn (_lagThreshold < 1 / _tinyNum);\n\t\t\t\t}\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && (_doc || {}).visibilityState !== \"hidden\") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = !!vars.immediateRender;\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = !!vars.reversed;\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000 && ((_doc || {}).visibilityState !== \"hidden\" || !_ticker.lagSmoothing())) { //note: if the tab is hidden, we should still wake if lagSmoothing has been disabled.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tvar t = setTimeout(_checkTimeout, 2000);\n\t\t\t\tif (t.unref) {\n\t\t\t\t\t// allows a node process to exit even if the timeout’s callback hasn't been invoked. Without it, the node process could hang as this function is called every two seconds.\n\t\t\t\t\tt.unref();\n\t\t\t\t}\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime(true)) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale - _tinyNum));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvar pauseTime, t;\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tpauseTime = this._pauseTime;\n\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\tt = this.timeline;\n\t\t\twhile (t && t.timeline) { //must update the duration/totalDuration of all ancestor timelines immediately in case in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n\t\t\t\tt._dirty = true;\n\t\t\t\tt.totalDuration();\n\t\t\t\tt = t.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = this.rawTime() - (child._timeline.rawTime() - child._pauseTime);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t}\n\t\t\t}, true),\n\t\t\t_isSelector = function(v) {\n\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t},\n\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\tvar css = {},\n\t\t\t\t\tp;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvars.css = css;\n\t\t\t};\n\n\t\tp = TweenLite.prototype = new Animation();\n\t\tp.constructor = TweenLite;\n\t\tp.kill()._gc = false;\n\n//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\n\t\tp.ratio = 0;\n\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\n\t\tTweenLite.version = \"2.1.3\";\n\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\tTweenLite.ticker = _ticker;\n\t\tTweenLite.autoSleep = 120;\n\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t};\n\n\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\tif (selector) {\n\t\t\t\tTweenLite.selector = selector;\n\t\t\t\treturn selector(e);\n\t\t\t}\n\t\t\tif (!_doc) { //in some dev environments (like Angular 6), GSAP gets loaded before the document is defined! So re-query it here if/when necessary.\n\t\t\t\t_doc = window.document;\n\t\t\t}\n\t\t\treturn (!_doc) ? e : (_doc.querySelectorAll ? _doc.querySelectorAll(e) : _doc.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t};\n\n\t\tvar _lazyTweens = [],\n\t\t\t_lazyLookup = {},\n\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t_relExp = /[\\+-]=-?[\\.\\d]/,\n\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t_setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : (v === 1 && this.end != null) ? this.end : v ? this.join(\"\") : this.start;\n\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\tval = pt.m.call(this._tween, val, this._target || pt.t, this._tween);\n\t\t\t\t\t} else if (val < min) if (val > -min && !pt.blob) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_blobRound = function(v) {\n\t\t\t\treturn (((v * 1000) | 0) / 1000) + \"\";\n\t\t\t},\n\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\ts = \"\",\n\t\t\t\t\tcolor = 0,\n\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\ta.start = start;\n\t\t\t\ta.end = end;\n\t\t\t\tstart = a[0] = start + \"\"; //ensure values are strings\n\t\t\t\tend = a[1] = end + \"\";\n\t\t\t\tif (filter) {\n\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\tstart = a[0];\n\t\t\t\t\tend = a[1];\n\t\t\t\t}\n\t\t\t\ta.length = 0;\n\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\tif (pt) {\n\t\t\t\t\tpt._next = null;\n\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t}\n\t\t\t\tl = endNums.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : _blobRound}; //limiting to 3 decimal places and casting as a string can really help performance when array.join() is called!\n\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t}\n\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t}\n\t\t\t\ts += end.substr(charIndex);\n\t\t\t\tif (s) {\n\t\t\t\t\ta.push(s);\n\t\t\t\t}\n\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\tif (_relExp.test(end)) { //if the end string contains relative values, delete it so that on the final render (in _setRatio()), we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\t\t\t\t\ta.end = null;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t}\n\t\t\t\tvar type = typeof(target[prop]),\n\t\t\t\t\tgetterName = (type !== \"function\") ? \"\" : ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3)),\n\t\t\t\t\ts = (start !== \"get\") ? start : !getterName ? target[prop] : funcParam ? target[getterName](funcParam) : target[getterName](),\n\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\tblob;\n\n\t\t\t\tif (typeof(s) !== \"number\" || (typeof(end) !== \"number\" && !isRelative)) {\n\t\t\t\t\tif (funcParam || isNaN(s) || (!isRelative && isNaN(end)) || typeof(s) === \"boolean\" || typeof(end) === \"boolean\") {\n\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\tblob = _blobDif(s, (isRelative ? (parseFloat(pt.s) + pt.c) + (pt.s + \"\").replace(/[0-9\\-\\.]/g, \"\") : end), stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\tpt = {t: blob, p: \"setRatio\", s: 0, c: 1, f: 2, pg: 0, n: overwriteProp || prop, pr: 0, m: 0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\tif (!isRelative) {\n\t\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t_tweenLookupNum = 0,\n\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1, yoyoEase:1, stagger:1},\n\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t_nextGCFrame = 30,\n\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\tvar l = _lazyTweens.length,\n\t\t\t\t\ti, tween;\n\t\t\t\t_lazyLookup = {};\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_lazyTweens.length = 0;\n\t\t\t};\n\n\t\t_rootTimeline._startTime = _ticker.time;\n\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\n\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\tvar i, a, p;\n\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\n\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t}\n\t\t\t\tif (tween) {\n\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t},\n\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\tif (func) {\n\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\tif (func) {\n\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t},\n\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\tl = siblings.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t\t//NOTE: Add tiny amount to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\toverlaps = [],\n\t\t\t\t\toCount = 0,\n\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\tglobalStart;\n\t\t\t\ti = siblings.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) {\n\t\t\t\t\t\t//ignore\n\t\t\t\t\t} else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= _tinyNum * 2)) {\n\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = oCount;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\tl = curTween._firstPT; //we need to discern if there were property tweens originally; if they all get removed in the next line's _kill() call, the tween should be killed. See https://github.com/greensock/GreenSock-JS/issues/278\n\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted && l)) {\n\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t},\n\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\tt = tween._startTime;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\treturn -100;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\tt /= ts;\n\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t};\n\n\n//---- TweenLite instance methods -----------------------------------------------------------------------------\n\n\t\tp._init = function() {\n\t\t\tvar v = this.vars,\n\t\t\t\top = this._overwrittenProps,\n\t\t\t\tdur = this._duration,\n\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\tease = v.ease,\n\t\t\t\tstartAt = this._startAt,\n\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\tif (v.startAt) {\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t}\n\t\t\t\tstartVars = {};\n\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t}\n\t\t\t\tstartVars.data = \"isStart\";\n\t\t\t\tstartVars.overwrite = false;\n\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\tstartVars.onUpdate = v.onUpdate;\n\t\t\t\tstartVars.onUpdateParams = v.onUpdateParams;\n\t\t\t\tstartVars.onUpdateScope = v.onUpdateScope || v.callbackScope || this;\n\t\t\t\tthis._startAt = TweenLite.to(this.target || {}, 0, startVars);\n\t\t\t\tif (immediate) {\n\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true);\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t\tthis._startAt = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t}\n\t\t\t\t\tpt = {};\n\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t}\n\t\t\tthis._easeType = this._ease._type;\n\t\t\tthis._easePower = this._ease._power;\n\t\t\tthis._firstPT = null;\n\n\t\t\tif (this._targets) {\n\t\t\t\tl = this._targets.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t}\n\n\t\t\tif (initPlugins) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t}\n\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\tthis._enabled(false, false);\n\t\t\t}\n\t\t\tif (v.runBackwards) {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\tthis._initted = true;\n\t\t};\n\n\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\tif (target == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t}\n\n\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t}\n\t\t\tfor (p in this.vars) {\n\t\t\t\tv = this.vars[p];\n\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\n\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t}\n\t\t\treturn initPlugins;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\tduration = self._duration,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\tif (time >= duration - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = self._time = duration;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(1) : 1;\n\t\t\t\tif (!self._reversed ) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || self._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (self._startTime === self._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -_tinyNum) || (prevRawPrevTime === _tinyNum && self.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = 0;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && self.data === \"isPause\")) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!self._initted || (self._startAt && self._startAt.progress())) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately. Also, we check progress() because if startAt has already rendered at its end, we should force a render at its beginning. Otherwise, if you put the playhead directly on top of where a fromTo({immediateRender:false}) starts, and then move it backwards, the from() won't revert its values.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = time;\n\n\t\t\t\tif (self._easeType) {\n\t\t\t\t\tvar r = time / duration, type = self._easeType, pow = self._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\t\t\t\t\tself.ratio = (type === 1) ? 1 - r : (type === 2) ? r : (time / duration < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t\t\t} else {\n\t\t\t\t\tself.ratio = self._ease.getRatio(time / duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._time === prevTime && !force) {\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._init();\n\t\t\t\tif (!self._initted || self._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && self._firstPT && ((self.vars.lazy !== false && self._duration) || (self.vars.lazy && !self._duration))) {\n\t\t\t\t\tself._time = self._totalTime = prevTime;\n\t\t\t\t\tself._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t_lazyTweens.push(self);\n\t\t\t\t\tself._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (self._time && !isComplete) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t} else if (isComplete && self._ease._calcEnd) {\n\t\t\t\t\tself.ratio = self._ease.getRatio((self._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\tself._lazy = false;\n\t\t\t}\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time >= 0) {\n\t\t\t\tself._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTime === 0) {\n\t\t\t\tif (self._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.vars.onStart) if (self._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tself._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpt = self._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * self.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * self.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (self._onUpdate) {\n\t\t\t\tif (time < 0) if (self._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (self._time !== prevTime || isComplete || force) {\n\t\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) if (!self._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && self._startAt && !self._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && self._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tself._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\tif (vars === \"all\") {\n\t\t\t\tvars = null;\n\t\t\t}\n\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\tthis._lazy = false;\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\tfirstPT = this._firstPT,\n\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._targets) {\n\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t}\n\n\t\t\t\tif (propLookup) {\n\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._firstPT && this._initted && firstPT) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t}\n\t\t\tvar t = this._time;\n\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\tif (this.vars.immediateRender) {\n\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\tthis.render(t, false, this.vars.lazy !== false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (enabled && this._gc) {\n\t\t\t\tvar targets = this._targets,\n\t\t\t\t\ti;\n\t\t\t\tif (targets) {\n\t\t\t\t\ti = targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n//----TweenLite static methods -----------------------------------------------------\n\n\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t};\n\n\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenLite.set = function(target, vars) {\n\t\t\treturn new TweenLite(target, 0, vars);\n\t\t};\n\n\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\tif (target == null) { return []; }\n\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\tvar i, a, j, t;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\ta = [];\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t}\n\t\t\t\ti = a.length;\n\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tt = a[i];\n\t\t\t\t\tj = i;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (target._gsTweenID) {\n\t\t\t\ta = _register(target).concat();\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a || [];\n\t\t};\n\n\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\tonlyActive = false;\n\t\t\t}\n\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\ta[i]._kill(vars, target);\n\t\t\t}\n\t\t};\n\n\n\n/*\n * ----------------------------------------------------------------\n * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n * ----------------------------------------------------------------\n */\n\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t}, true);\n\n\t\tp = TweenPlugin.prototype;\n\t\tTweenPlugin.version = \"1.19.0\";\n\t\tTweenPlugin.API = 2;\n\t\tp._firstPT = null;\n\t\tp._addTween = _addPropTween;\n\t\tp.setRatio = _setRatio;\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._overwriteProps,\n\t\t\t\tpt = this._firstPT,\n\t\t\t\ti;\n\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\tthis._overwriteProps = [];\n\t\t\t} else {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tval;\n\t\t\twhile (pt) {\n\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\tvar pt = tween._firstPT,\n\t\t\t\tchanged, pt2, first, last, next;\n\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tpt = tween._firstPT = first;\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tTweenPlugin.activate = function(plugins) {\n\t\t\tvar i = plugins.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t_gsDefine.plugin = function(config) {\n\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\tvar propName = config.propName,\n\t\t\t\tpriority = config.priority || 0,\n\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t}, (config.global === true)),\n\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\tprop;\n\t\t\tp.constructor = Plugin;\n\t\t\tPlugin.API = config.API;\n\t\t\tfor (prop in map) {\n\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\tPlugin.version = config.version;\n\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\treturn Plugin;\n\t\t};\n\n\n\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\ta = window._gsQueue;\n\t\tif (a) {\n\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\ta[i]();\n\t\t\t}\n\t\t\tfor (p in _defLookup) {\n\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\n\t\treturn TweenLite;\n\n})(_gsScope, \"TweenLite\");\n\nexport var globals = _gsScope.GreenSockGlobals;\nvar nonGlobals = globals.com.greensock;\nexport { TweenLite as default };\nexport var SimpleTimeline = nonGlobals.core.SimpleTimeline;\nexport var Animation = nonGlobals.core.Animation;\nexport var Ease = globals.Ease;\nexport var Linear = globals.Linear;\nexport var Power0 = Linear;\nexport var Power1 = globals.Power1;\nexport var Power2 = globals.Power2;\nexport var Power3 = globals.Power3;\nexport var Power4 = globals.Power4;\nexport var TweenPlugin = globals.TweenPlugin;\nexport var EventDispatcher = nonGlobals.events.EventDispatcher;\n","/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport TweenLite, { TweenPlugin, Ease, Power0, Power1, Power2, Power3, Power4, Linear } from \"./TweenLite.js\";\nimport TweenMaxBase from \"./TweenMaxBase.js\";\nimport CSSPlugin from \"./CSSPlugin.js\";\nimport AttrPlugin from \"./AttrPlugin.js\";\nimport RoundPropsPlugin from \"./RoundPropsPlugin.js\";\nimport DirectionalRotationPlugin from \"./DirectionalRotationPlugin.js\";\nimport TimelineLite from \"./TimelineLite.js\";\nimport TimelineMax from \"./TimelineMax.js\";\nimport BezierPlugin from \"./BezierPlugin.js\";\nimport { Back, Elastic, Bounce, RoughEase, SlowMo, SteppedEase, Circ, Expo, Sine, ExpoScaleEase } from \"./EasePack.js\";\n\n//the following two lines are designed to prevent tree shaking of the classes that were historically included with TweenMax (otherwise, folks would have to reference CSSPlugin, for example, to ensure their CSS-related animations worked)\nexport var TweenMax = TweenMaxBase;\nTweenMax._autoActivated = [TimelineLite, TimelineMax, CSSPlugin, AttrPlugin, BezierPlugin, RoundPropsPlugin, DirectionalRotationPlugin, Back, Elastic, Bounce, RoughEase, SlowMo, SteppedEase, Circ, Expo, Sine, ExpoScaleEase];\n\nexport { TweenMax as default };\nexport { TweenLite, TimelineLite, TimelineMax, CSSPlugin, AttrPlugin, BezierPlugin, DirectionalRotationPlugin, RoundPropsPlugin, TweenPlugin, Ease, Power0, Power1, Power2, Power3, Power4, Linear, Back, Elastic, Bounce, RoughEase, SlowMo, SteppedEase, Circ, Expo, Sine, ExpoScaleEase };\n","/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, Animation, SimpleTimeline, Ease, Power0, Power1, Power2, Power3, Power4, Linear  } from \"./TweenLite.js\";\n\n\n_gsScope._gsDefine(\"TweenMax\", [\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"], function() {\n\n\t\tvar _slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \"function\") ? val(i, targets[i], targets) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\t//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\n\t\t\t_distribute = function(v) {\n\t\t\t\tif (typeof(v) === \"function\") {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tvar vars = (typeof(v) === \"object\") ? v : {each:v}, //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \"amount\" that's chunked out among them all.\n\t\t\t\t\tease = vars.ease,\n\t\t\t\t\tfrom = vars.from || 0,\n\t\t\t\t\tbase = vars.base || 0,\n\t\t\t\t\tcache = {},\n\t\t\t\t\tisFromKeyword = isNaN(from),\n\t\t\t\t\taxis = vars.axis,\n\t\t\t\t\tratio = {center:0.5, end:1}[from] || 0;\n\t\t\t\treturn function(i, target, a) {\n\t\t\t\t\tvar l = (a || vars).length,\n\t\t\t\t\t\tdistances = cache[l],\n\t\t\t\t\t\toriginX, originY, x, y, d, j, max, min, wrap;\n\t\t\t\t\tif (!distances) {\n\t\t\t\t\t\twrap = (vars.grid === \"auto\") ? 0 : (vars.grid || [Infinity])[0];\n\t\t\t\t\t\tif (!wrap) {\n\t\t\t\t\t\t\tmax = -Infinity;\n\t\t\t\t\t\t\twhile (max < (max = a[wrap++].getBoundingClientRect().left) && wrap < l) { }\n\t\t\t\t\t\t\twrap--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances = cache[l] = [];\n\t\t\t\t\t\toriginX = isFromKeyword ? (Math.min(wrap, l) * ratio) - 0.5 : from % wrap;\n\t\t\t\t\t\toriginY = isFromKeyword ? l * ratio / wrap - 0.5 : (from / wrap) | 0;\n\t\t\t\t\t\tmax = 0;\n\t\t\t\t\t\tmin = Infinity;\n\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\tx = (j % wrap) - originX;\n\t\t\t\t\t\t\ty = originY - ((j / wrap) | 0);\n\t\t\t\t\t\t\tdistances[j] = d = !axis ? Math.sqrt(x * x + y * y) : Math.abs((axis === \"y\") ? y : x);\n\t\t\t\t\t\t\tif (d > max) {\n\t\t\t\t\t\t\t\tmax = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (d < min) {\n\t\t\t\t\t\t\t\tmin = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances.max = max - min;\n\t\t\t\t\t\tdistances.min = min;\n\t\t\t\t\t\tdistances.v = l = vars.amount || (vars.each * (wrap > l ? l - 1 : !axis ? Math.max(wrap, l / wrap) : axis === \"y\" ? l / wrap : wrap)) || 0;\n\t\t\t\t\t\tdistances.b = (l < 0) ? base - l : base;\n\t\t\t\t\t}\n\t\t\t\t\tl = (distances[i] - distances.min) / distances.max;\n\t\t\t\t\treturn distances.b + (ease ? ease.getRatio(l) : l) * distances.v;\n\t\t\t\t};\n\t\t\t},\n\t\t\tTweenMax = function(target, duration, vars) {\n\t\t\t\tTweenLite.call(this, target, duration, vars);\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true || !!this.vars.yoyoEase);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tif (this._repeat) {\n\t\t\t\t\tthis._uncache(true); //ensures that if there is any repeat, the totalDuration will get recalculated to accurately report it.\n\t\t\t\t}\n\t\t\t\tthis.render = TweenMax.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\t\t\t},\n\t\t\t_tinyNum = 0.00000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\tp = TweenMax.prototype = TweenLite.to({}, 0.1, {}),\n\t\t\t_blankArray = [];\n\n\t\tTweenMax.version = \"2.1.3\";\n\t\tp.constructor = TweenMax;\n\t\tp.kill()._gc = false;\n\t\tTweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;\n\t\tTweenMax.getTweensOf = TweenLite.getTweensOf;\n\t\tTweenMax.lagSmoothing = TweenLite.lagSmoothing;\n\t\tTweenMax.ticker = TweenLite.ticker;\n\t\tTweenMax.render = TweenLite.render;\n\t\tTweenMax.distribute = _distribute;\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = (this.vars.yoyo === true || !!this.vars.yoyoEase);\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._yoyoEase = null;\n\t\t\tthis._uncache(true);\n\t\t\treturn TweenLite.prototype.invalidate.call(this);\n\t\t};\n\n\t\tp.updateTo = function(vars, resetDuration) {\n\t\t\tvar self = this,\n\t\t\t\tcurRatio = self.ratio,\n\t\t\t\timmediate = self.vars.immediateRender || vars.immediateRender,\n\t\t\t\tp;\n\t\t\tif (resetDuration && self._startTime < self._timeline._time) {\n\t\t\t\tself._startTime = self._timeline._time;\n\t\t\t\tself._uncache(false);\n\t\t\t\tif (self._gc) {\n\t\t\t\t\tself._enabled(true, false);\n\t\t\t\t} else {\n\t\t\t\t\tself._timeline.insert(self, self._startTime - self._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (p in vars) {\n\t\t\t\tself.vars[p] = vars[p];\n\t\t\t}\n\t\t\tif (self._initted || immediate) {\n\t\t\t\tif (resetDuration) {\n\t\t\t\t\tself._initted = false;\n\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\tself.render(0, true, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (self._gc) {\n\t\t\t\t\t\tself._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (self._notifyPluginsOfEnabled && self._firstPT) {\n\t\t\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", self); //in case a plugin like MotionBlur must perform some cleanup tasks\n\t\t\t\t\t}\n\t\t\t\t\tif (self._time / self._duration > 0.998) { //if the tween has finished (or come extremely close to finishing), we just need to rewind it to 0 and then render it again at the end which forces it to re-initialize (parsing the new vars). We allow tweens that are close to finishing (but haven't quite finished) to work this way too because otherwise, the values are so small when determining where to project the starting values that binary math issues creep in and can make the tween appear to render incorrectly when run backwards.\n\t\t\t\t\t\tvar prevTime = self._totalTime;\n\t\t\t\t\t\tself.render(0, true, false);\n\t\t\t\t\t\tself._initted = false;\n\t\t\t\t\t\tself.render(prevTime, true, false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself._initted = false;\n\t\t\t\t\t\tself._init();\n\t\t\t\t\t\tif (self._time > 0 || immediate) {\n\t\t\t\t\t\t\tvar inv = 1 / (1 - curRatio),\n\t\t\t\t\t\t\t\tpt = self._firstPT, endValue;\n\t\t\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\t\t\tendValue = pt.s + pt.c;\n\t\t\t\t\t\t\t\tpt.c *= inv;\n\t\t\t\t\t\t\t\tpt.s = endValue - pt.c;\n\t\t\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn self;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (!this._initted) if (this._duration === 0 && this.vars.repeat) { //zero duration tweens that render immediately have render() called from TweenLite's constructor, before TweenMax's constructor has finished setting _repeat, _repeatDelay, and _yoyo which are critical in determining totalDuration() so we need to call invalidate() which is a low-kb way to get those set properly.\n\t\t\t\tthis.invalidate();\n\t\t\t}\n\t\t\tvar self = this,\n\t\t\t\ttotalDur = (!self._dirty) ? self._totalDuration : self.totalDuration(),\n\t\t\t\tprevTime = self._time,\n\t\t\t\tprevTotalTime = self._totalTime,\n\t\t\t\tprevCycle = self._cycle,\n\t\t\t\tduration = self._duration,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, cycleDuration, r, type, pow, rawPrevTime, yoyoEase;\n\t\t\tif (time >= totalDur - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = totalDur;\n\t\t\t\tself._cycle = self._repeat;\n\t\t\t\tif (self._yoyo && (self._cycle & 1) !== 0) {\n\t\t\t\t\tself._time = 0;\n\t\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\t} else {\n\t\t\t\t\tself._time = duration;\n\t\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(1) : 1;\n\t\t\t\t}\n\t\t\t\tif (!self._reversed) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || self._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (self._startTime === self._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -_tinyNum) || (prevRawPrevTime === _tinyNum && self.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = self._cycle = 0;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTotalTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!self._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = time;\n\t\t\t\tif (self._repeat !== 0) {\n\t\t\t\t\tcycleDuration = duration + self._repeatDelay;\n\t\t\t\t\tself._cycle = (self._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\t\t\t\t\tif (self._cycle !== 0) if (self._cycle === self._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\tself._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t}\n\t\t\t\t\tself._time = self._totalTime - (self._cycle * cycleDuration);\n\t\t\t\t\tif (self._yoyo) if ((self._cycle & 1) !== 0) {\n\t\t\t\t\t\tself._time = duration - self._time;\n\t\t\t\t\t\tyoyoEase = self._yoyoEase || self.vars.yoyoEase; //note: we don't set this._yoyoEase in _init() like we do other properties because it's TweenMax-specific and doing it here allows us to optimize performance (most tweens don't have a yoyoEase). Note that we also must skip the this.ratio calculation further down right after we _init() in this function, because we're doing it here.\n\t\t\t\t\t\tif (yoyoEase) {\n\t\t\t\t\t\t\tif (!self._yoyoEase) {\n\t\t\t\t\t\t\t\tif (yoyoEase === true && !self._initted) { //if it's not initted and yoyoEase is true, this._ease won't have been populated yet so we must discern it here.\n\t\t\t\t\t\t\t\t\tyoyoEase = self.vars.ease;\n\t\t\t\t\t\t\t\t\tself._yoyoEase = yoyoEase = !yoyoEase ? TweenLite.defaultEase : (yoyoEase instanceof Ease) ? yoyoEase : (typeof(yoyoEase) === \"function\") ? new Ease(yoyoEase, self.vars.easeParams) : Ease.map[yoyoEase] || TweenLite.defaultEase;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself._yoyoEase = yoyoEase = (yoyoEase === true) ? self._ease : (yoyoEase instanceof Ease) ? yoyoEase : Ease.map[yoyoEase];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.ratio = yoyoEase ? 1 - yoyoEase.getRatio((duration - self._time) / duration) : 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (self._time > duration) {\n\t\t\t\t\t\tself._time = duration;\n\t\t\t\t\t} else if (self._time < 0) {\n\t\t\t\t\t\tself._time = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self._easeType && !yoyoEase) {\n\t\t\t\t\tr = self._time / duration;\n\t\t\t\t\ttype = self._easeType;\n\t\t\t\t\tpow = self._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\t\t\t\t\tself.ratio = (type === 1) ? 1 - r : (type === 2) ? r : (self._time / duration < 0.5) ? r / 2 : 1 - (r / 2);\n\n\t\t\t\t} else if (!yoyoEase) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (prevTime === self._time && !force && prevCycle === self._cycle) {\n\t\t\t\tif (prevTotalTime !== self._totalTime) if (self._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._init();\n\t\t\t\tif (!self._initted || self._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && self._firstPT && ((self.vars.lazy !== false && self._duration) || (self.vars.lazy && !self._duration))) { //we stick it in the queue for rendering at the very end of the tick - this is a performance optimization because browsers invalidate styles and force a recalculation if you read, write, and then read style data (so it's better to read/read/read/write/write/write than read/write/read/write/read/write). The down side, of course, is that usually you WANT things to render immediately because you may have code running right after that which depends on the change. Like imagine running TweenLite.set(...) and then immediately after that, creating a nother tween that animates the same property to another value; the starting values of that 2nd tween wouldn't be accurate if lazy is true.\n\t\t\t\t\tself._time = prevTime;\n\t\t\t\t\tself._totalTime = prevTotalTime;\n\t\t\t\t\tself._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\tself._cycle = prevCycle;\n\t\t\t\t\tTweenLiteInternals.lazyTweens.push(self);\n\t\t\t\t\tself._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (self._time && !isComplete && !yoyoEase) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t} else if (isComplete && this._ease._calcEnd && !yoyoEase) {\n\t\t\t\t\tself.ratio = self._ease.getRatio((self._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._lazy !== false) {\n\t\t\t\tself._lazy = false;\n\t\t\t}\n\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time >= 0) {\n\t\t\t\tself._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTotalTime === 0) {\n\t\t\t\tif (self._initted === 2 && time > 0) {\n\t\t\t\t\tself._init(); //will just apply overwriting since _initted of (2) means it was a from() tween that had immediateRender:true\n\t\t\t\t}\n\t\t\t\tif (self._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.vars.onStart) if (self._totalTime !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tself._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpt = self._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * self.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * self.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (self._onUpdate) {\n\t\t\t\tif (time < 0) if (self._startAt && self._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (self._totalTime !== prevTotalTime || callback) {\n\t\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._cycle !== prevCycle) if (!suppressEvents) if (!self._gc) if (self.vars.onRepeat) {\n\t\t\t\tself._callback(\"onRepeat\");\n\t\t\t}\n\t\t\tif (callback) if (!self._gc || force) { //check gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && self._startAt && !self._onUpdate && self._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && self._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tself._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n//---- STATIC FUNCTIONS -----------------------------------------------------------------------------------------------------------\n\n\t\tTweenMax.to = function(target, duration, vars) {\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\n\t\tTweenMax.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\n\t\tTweenMax.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, toVars);\n\t\t};\n\n\t\tTweenMax.staggerTo = TweenMax.allTo = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvar a = [],\n\t\t\t\tstaggerFunc = _distribute(vars.stagger || stagger),\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tfromCycle = (vars.startAt || _blankArray).cycle,\n\t\t\t\tl, copy, i, p;\n\t\t\tif (!_isArray(targets)) {\n\t\t\t\tif (typeof(targets) === \"string\") {\n\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t}\n\t\t\t\tif (_isSelector(targets)) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tl = targets.length - 1;\n\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (fromCycle) {\n\t\t\t\t\tfromCycle = copy.startAt = {};\n\t\t\t\t\tfor (p in vars.startAt) {\n\t\t\t\t\t\tfromCycle[p] = vars.startAt[p];\n\t\t\t\t\t}\n\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t}\n\t\t\t\tcopy.delay = staggerFunc(i, targets[i], targets) + (copy.delay || 0);\n\t\t\t\tif (i === l && onCompleteAll) {\n\t\t\t\t\tcopy.onComplete = function() {\n\t\t\t\t\t\tif (vars.onComplete) {\n\t\t\t\t\t\t\tvars.onComplete.apply(vars.onCompleteScope || this, arguments);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCompleteAll.apply(onCompleteAllScope || vars.callbackScope || this, onCompleteAllParams || _blankArray);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ta[i] = new TweenMax(targets[i], duration, copy);\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tTweenMax.staggerFrom = TweenMax.allFrom = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tTweenMax.staggerFromTo = TweenMax.allFromTo = function(targets, duration, fromVars, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tTweenMax.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenMax(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenMax.set = function(target, vars) {\n\t\t\treturn new TweenMax(target, 0, vars);\n\t\t};\n\n\t\tTweenMax.isTweening = function(target) {\n\t\t\treturn (TweenLite.getTweensOf(target, true).length > 0);\n\t\t};\n\n\t\tvar _getChildrenOf = function(timeline, includeTimelines) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\ttween = timeline._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween instanceof TweenLite) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (includeTimelines) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta = a.concat(_getChildrenOf(tween, includeTimelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\tgetAllTweens = TweenMax.getAllTweens = function(includeTimelines) {\n\t\t\t\treturn _getChildrenOf(Animation._rootTimeline, includeTimelines).concat( _getChildrenOf(Animation._rootFramesTimeline, includeTimelines) );\n\t\t\t};\n\n\t\tTweenMax.killAll = function(complete, tweens, delayedCalls, timelines) {\n\t\t\tif (tweens == null) {\n\t\t\t\ttweens = true;\n\t\t\t}\n\t\t\tif (delayedCalls == null) {\n\t\t\t\tdelayedCalls = true;\n\t\t\t}\n\t\t\tvar a = getAllTweens((timelines != false)),\n\t\t\t\tl = a.length,\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\tisDC, tween, i;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\tif (complete) {\n\t\t\t\t\t\ttween.totalTime(tween._reversed ? 0 : tween.totalDuration());\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tTweenMax.killChildTweensOf = function(parent, complete) {\n\t\t\tif (parent == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar tl = TweenLiteInternals.tweenLookup,\n\t\t\t\ta, curParent, p, i, l;\n\t\t\tif (typeof(parent) === \"string\") {\n\t\t\t\tparent = TweenLite.selector(parent) || parent;\n\t\t\t}\n\t\t\tif (_isSelector(parent)) {\n\t\t\t\tparent = _slice(parent);\n\t\t\t}\n\t\t\tif (_isArray(parent)) {\n\t\t\t\ti = parent.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tTweenMax.killChildTweensOf(parent[i], complete);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ta = [];\n\t\t\tfor (p in tl) {\n\t\t\t\tcurParent = tl[p].target.parentNode;\n\t\t\t\twhile (curParent) {\n\t\t\t\t\tif (curParent === parent) {\n\t\t\t\t\t\ta = a.concat(tl[p].tweens);\n\t\t\t\t\t}\n\t\t\t\t\tcurParent = curParent.parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t\tl = a.length;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (complete) {\n\t\t\t\t\ta[i].totalTime(a[i].totalDuration());\n\t\t\t\t}\n\t\t\t\ta[i]._enabled(false, false);\n\t\t\t}\n\t\t};\n\n\t\tvar _changePause = function(pause, tweens, delayedCalls, timelines) {\n\t\t\ttweens = (tweens !== false);\n\t\t\tdelayedCalls = (delayedCalls !== false);\n\t\t\ttimelines = (timelines !== false);\n\t\t\tvar a = getAllTweens(timelines),\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\ti = a.length,\n\t\t\t\tisDC, tween;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\ttween.paused(pause);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tTweenMax.pauseAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(true, tweens, delayedCalls, timelines);\n\t\t};\n\n\t\tTweenMax.resumeAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(false, tweens, delayedCalls, timelines);\n\t\t};\n\n\t\tTweenMax.globalTimeScale = function(value) {\n\t\t\tvar tl = Animation._rootTimeline,\n\t\t\t\tt = TweenLite.ticker.time;\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn tl._timeScale;\n\t\t\t}\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl = Animation._rootFramesTimeline;\n\t\t\tt = TweenLite.ticker.frame;\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl._timeScale = Animation._rootTimeline._timeScale = value;\n\t\t\treturn value;\n\t\t};\n\n\n//---- GETTERS / SETTERS ----------------------------------------------------------------------------------------------------------\n\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? (this.duration() ? this._time / this._duration : this.ratio) : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tvar duration = this._duration,\n\t\t\t\tcycle = this._cycle,\n\t\t\t\tcycleDur = cycle * (duration + this._repeatDelay);\n\t\t\tif (value > duration) {\n\t\t\t\tvalue = duration;\n\t\t\t}\n\t\t\treturn this.totalTime((this._yoyo && (cycle & 1)) ? duration - value + cycleDur : this._repeat ? value + cycleDur : value, suppressEvents);\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._duration; //don't set _dirty = false because there could be repeats that haven't been factored into the _totalDuration yet. Otherwise, if you create a repeated TweenMax and then immediately check its duration(), it would cache the value and the totalDuration would not be correct, thus repeats wouldn't take effect.\n\t\t\t}\n\t\t\treturn Animation.prototype.duration.call(this, value);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\t//instead of Infinity, we use 999999999999 so that we can accommodate reverses\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) );\n\t\t};\n\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\n\n\t\treturn TweenMax;\n\n\t}, true);\n\nexport var TweenMax = globals.TweenMax;\nexport var TweenMaxBase = TweenMax;\nexport { TweenMax as default };\nexport { TweenLite, Ease, Power0, Power1, Power2, Power3, Power4, Linear };\n","(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module unless amdModuleId is set\n    define([\"jquery\"], function (a0) {\n      return (root['jQuery'] = factory(a0));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    root['jQuery'] = factory(jQuery);\n  }\n}(this, function (jQuery) {\n\n/*\n * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/\n *\n * Uses the built in easing capabilities added In jQuery 1.1\n * to offer multiple easing options\n *\n * TERMS OF USE - jQuery Easing\n * \n * Open source under the BSD License. \n * \n * Copyright © 2008 George McGinley Smith\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice, this list of \n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list \n * of conditions and the following disclaimer in the documentation and/or other materials \n * provided with the distribution.\n * \n * Neither the name of the author nor the names of contributors may be used to endorse \n * or promote products derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n * OF THE POSSIBILITY OF SUCH DAMAGE. \n *\n*/\n\n// t: current time, b: begInnIng value, c: change In value, d: duration\njQuery.easing['jswing'] = jQuery.easing['swing'];\n\njQuery.extend( jQuery.easing,\n{\n\tdef: 'easeOutQuad',\n\tswing: function (x, t, b, c, d) {\n\t\t//alert(jQuery.easing.default);\n\t\treturn jQuery.easing[jQuery.easing.def](x, t, b, c, d);\n\t},\n\teaseInQuad: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t + b;\n\t},\n\teaseOutQuad: function (x, t, b, c, d) {\n\t\treturn -c *(t/=d)*(t-2) + b;\n\t},\n\teaseInOutQuad: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t + b;\n\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t},\n\teaseInCubic: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t + b;\n\t},\n\teaseOutCubic: function (x, t, b, c, d) {\n\t\treturn c*((t=t/d-1)*t*t + 1) + b;\n\t},\n\teaseInOutCubic: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t + b;\n\t\treturn c/2*((t-=2)*t*t + 2) + b;\n\t},\n\teaseInQuart: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t*t + b;\n\t},\n\teaseOutQuart: function (x, t, b, c, d) {\n\t\treturn -c * ((t=t/d-1)*t*t*t - 1) + b;\n\t},\n\teaseInOutQuart: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t + b;\n\t\treturn -c/2 * ((t-=2)*t*t*t - 2) + b;\n\t},\n\teaseInQuint: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t*t*t + b;\n\t},\n\teaseOutQuint: function (x, t, b, c, d) {\n\t\treturn c*((t=t/d-1)*t*t*t*t + 1) + b;\n\t},\n\teaseInOutQuint: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;\n\t\treturn c/2*((t-=2)*t*t*t*t + 2) + b;\n\t},\n\teaseInSine: function (x, t, b, c, d) {\n\t\treturn -c * Math.cos(t/d * (Math.PI/2)) + c + b;\n\t},\n\teaseOutSine: function (x, t, b, c, d) {\n\t\treturn c * Math.sin(t/d * (Math.PI/2)) + b;\n\t},\n\teaseInOutSine: function (x, t, b, c, d) {\n\t\treturn -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;\n\t},\n\teaseInExpo: function (x, t, b, c, d) {\n\t\treturn (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n\t},\n\teaseOutExpo: function (x, t, b, c, d) {\n\t\treturn (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n\t},\n\teaseInOutExpo: function (x, t, b, c, d) {\n\t\tif (t==0) return b;\n\t\tif (t==d) return b+c;\n\t\tif ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;\n\t\treturn c/2 * (-Math.pow(2, -10 * --t) + 2) + b;\n\t},\n\teaseInCirc: function (x, t, b, c, d) {\n\t\treturn -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;\n\t},\n\teaseOutCirc: function (x, t, b, c, d) {\n\t\treturn c * Math.sqrt(1 - (t=t/d-1)*t) + b;\n\t},\n\teaseInOutCirc: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;\n\t\treturn c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;\n\t},\n\teaseInElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\treturn -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n\t},\n\teaseOutElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\treturn a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;\n\t},\n\teaseInOutElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\tif (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n\t\treturn a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;\n\t},\n\teaseInBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c*(t/=d)*t*((s+1)*t - s) + b;\n\t},\n\teaseOutBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\n\t},\n\teaseInOutBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158; \n\t\tif ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\n\t\treturn c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\n\t},\n\teaseInBounce: function (x, t, b, c, d) {\n\t\treturn c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;\n\t},\n\teaseOutBounce: function (x, t, b, c, d) {\n\t\tif ((t/=d) < (1/2.75)) {\n\t\t\treturn c*(7.5625*t*t) + b;\n\t\t} else if (t < (2/2.75)) {\n\t\t\treturn c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\n\t\t} else if (t < (2.5/2.75)) {\n\t\t\treturn c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\n\t\t} else {\n\t\t\treturn c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;\n\t\t}\n\t},\n\teaseInOutBounce: function (x, t, b, c, d) {\n\t\tif (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;\n\t\treturn jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;\n\t}\n});\n\n/*\n *\n * TERMS OF USE - EASING EQUATIONS\n * \n * Open source under the BSD License. \n * \n * Copyright © 2001 Robert Penner\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice, this list of \n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list \n * of conditions and the following disclaimer in the documentation and/or other materials \n * provided with the distribution.\n * \n * Neither the name of the author nor the names of contributors may be used to endorse \n * or promote products derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n * OF THE POSSIBILITY OF SUCH DAMAGE. \n *\n */\nreturn jQuery;\n\n}));\n","/*!\n * jQuery JavaScript Library v3.6.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2022-08-26T17:52Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\t// trim whitespace for custom property (issue gh-4926)\n\t\tif ( isCustomProp ) {\n\n\t\t\t// rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" );\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t//     character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/* @preserve\n * Leaflet 1.9.2, a JS library for interactive maps. https://leafletjs.com\n * (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.leaflet = {}));\n})(this, (function (exports) { 'use strict';\n\n  var version = \"1.9.2\";\n\n  /*\r\n   * @namespace Util\r\n   *\r\n   * Various utility functions, used by Leaflet internally.\r\n   */\r\n\r\n  // @function extend(dest: Object, src?: Object): Object\r\n  // Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\n  function extend(dest) {\r\n  \tvar i, j, len, src;\r\n\r\n  \tfor (j = 1, len = arguments.length; j < len; j++) {\r\n  \t\tsrc = arguments[j];\r\n  \t\tfor (i in src) {\r\n  \t\t\tdest[i] = src[i];\r\n  \t\t}\r\n  \t}\r\n  \treturn dest;\r\n  }\r\n\r\n  // @function create(proto: Object, properties?: Object): Object\r\n  // Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\n  var create$2 = Object.create || (function () {\r\n  \tfunction F() {}\r\n  \treturn function (proto) {\r\n  \t\tF.prototype = proto;\r\n  \t\treturn new F();\r\n  \t};\r\n  })();\r\n\r\n  // @function bind(fn: Function, …): Function\r\n  // Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n  // Has a `L.bind()` shortcut.\r\n  function bind(fn, obj) {\r\n  \tvar slice = Array.prototype.slice;\r\n\r\n  \tif (fn.bind) {\r\n  \t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n  \t}\r\n\r\n  \tvar args = slice.call(arguments, 2);\r\n\r\n  \treturn function () {\r\n  \t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n  \t};\r\n  }\r\n\r\n  // @property lastId: Number\r\n  // Last unique ID used by [`stamp()`](#util-stamp)\r\n  var lastId = 0;\r\n\r\n  // @function stamp(obj: Object): Number\r\n  // Returns the unique ID of an object, assigning it one if it doesn't have it.\r\n  function stamp(obj) {\r\n  \tif (!('_leaflet_id' in obj)) {\r\n  \t\tobj['_leaflet_id'] = ++lastId;\r\n  \t}\r\n  \treturn obj._leaflet_id;\r\n  }\r\n\r\n  // @function throttle(fn: Function, time: Number, context: Object): Function\r\n  // Returns a function which executes function `fn` with the given scope `context`\r\n  // (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n  // `fn` will be called no more than one time per given amount of `time`. The arguments\r\n  // received by the bound function will be any arguments passed when binding the\r\n  // function, followed by any arguments passed when invoking the bound function.\r\n  // Has an `L.throttle` shortcut.\r\n  function throttle(fn, time, context) {\r\n  \tvar lock, args, wrapperFn, later;\r\n\r\n  \tlater = function () {\r\n  \t\t// reset lock and call if queued\r\n  \t\tlock = false;\r\n  \t\tif (args) {\r\n  \t\t\twrapperFn.apply(context, args);\r\n  \t\t\targs = false;\r\n  \t\t}\r\n  \t};\r\n\r\n  \twrapperFn = function () {\r\n  \t\tif (lock) {\r\n  \t\t\t// called too soon, queue to call later\r\n  \t\t\targs = arguments;\r\n\r\n  \t\t} else {\r\n  \t\t\t// call and lock until later\r\n  \t\t\tfn.apply(context, arguments);\r\n  \t\t\tsetTimeout(later, time);\r\n  \t\t\tlock = true;\r\n  \t\t}\r\n  \t};\r\n\r\n  \treturn wrapperFn;\r\n  }\r\n\r\n  // @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n  // Returns the number `num` modulo `range` in such a way so it lies within\r\n  // `range[0]` and `range[1]`. The returned value will be always smaller than\r\n  // `range[1]` unless `includeMax` is set to `true`.\r\n  function wrapNum(x, range, includeMax) {\r\n  \tvar max = range[1],\r\n  \t    min = range[0],\r\n  \t    d = max - min;\r\n  \treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n  }\r\n\r\n  // @function falseFn(): Function\r\n  // Returns a function which always returns `false`.\r\n  function falseFn() { return false; }\r\n\r\n  // @function formatNum(num: Number, precision?: Number|false): Number\r\n  // Returns the number `num` rounded with specified `precision`.\r\n  // The default `precision` value is 6 decimal places.\r\n  // `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\n  function formatNum(num, precision) {\r\n  \tif (precision === false) { return num; }\r\n  \tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n  \treturn Math.round(num * pow) / pow;\r\n  }\r\n\r\n  // @function trim(str: String): String\r\n  // Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\n  function trim(str) {\r\n  \treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n  }\r\n\r\n  // @function splitWords(str: String): String[]\r\n  // Trims and splits the string on whitespace and returns the array of parts.\r\n  function splitWords(str) {\r\n  \treturn trim(str).split(/\\s+/);\r\n  }\r\n\r\n  // @function setOptions(obj: Object, options: Object): Object\r\n  // Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\n  function setOptions(obj, options) {\r\n  \tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n  \t\tobj.options = obj.options ? create$2(obj.options) : {};\r\n  \t}\r\n  \tfor (var i in options) {\r\n  \t\tobj.options[i] = options[i];\r\n  \t}\r\n  \treturn obj.options;\r\n  }\r\n\r\n  // @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n  // Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n  // translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n  // be appended at the end. If `uppercase` is `true`, the parameter names will\r\n  // be uppercased (e.g. `'?A=foo&B=bar'`)\r\n  function getParamString(obj, existingUrl, uppercase) {\r\n  \tvar params = [];\r\n  \tfor (var i in obj) {\r\n  \t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n  \t}\r\n  \treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n  }\r\n\r\n  var templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n  // @function template(str: String, data: Object): String\r\n  // Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n  // and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n  // `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n  // data values — they will be evaluated passing `data` as an argument.\r\n  function template(str, data) {\r\n  \treturn str.replace(templateRe, function (str, key) {\r\n  \t\tvar value = data[key];\r\n\r\n  \t\tif (value === undefined) {\r\n  \t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n  \t\t} else if (typeof value === 'function') {\r\n  \t\t\tvalue = value(data);\r\n  \t\t}\r\n  \t\treturn value;\r\n  \t});\r\n  }\r\n\r\n  // @function isArray(obj): Boolean\r\n  // Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\n  var isArray = Array.isArray || function (obj) {\r\n  \treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n  };\r\n\r\n  // @function indexOf(array: Array, el: Object): Number\r\n  // Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\n  function indexOf(array, el) {\r\n  \tfor (var i = 0; i < array.length; i++) {\r\n  \t\tif (array[i] === el) { return i; }\r\n  \t}\r\n  \treturn -1;\r\n  }\r\n\r\n  // @property emptyImageUrl: String\r\n  // Data URI string containing a base64-encoded empty GIF image.\r\n  // Used as a hack to free memory from unused images on WebKit-powered\r\n  // mobile devices (by setting image `src` to this string).\r\n  var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n  // inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\n  function getPrefixed(name) {\r\n  \treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n  }\r\n\r\n  var lastTime = 0;\r\n\r\n  // fallback for IE 7-8\r\n  function timeoutDefer(fn) {\r\n  \tvar time = +new Date(),\r\n  \t    timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n  \tlastTime = time + timeToCall;\r\n  \treturn window.setTimeout(fn, timeToCall);\r\n  }\r\n\r\n  var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\n  var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n  \t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n  // @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n  // Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n  // `context` if given. When `immediate` is set, `fn` is called immediately if\r\n  // the browser doesn't have native support for\r\n  // [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n  // otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\n  function requestAnimFrame(fn, context, immediate) {\r\n  \tif (immediate && requestFn === timeoutDefer) {\r\n  \t\tfn.call(context);\r\n  \t} else {\r\n  \t\treturn requestFn.call(window, bind(fn, context));\r\n  \t}\r\n  }\r\n\r\n  // @function cancelAnimFrame(id: Number): undefined\r\n  // Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\n  function cancelAnimFrame(id) {\r\n  \tif (id) {\r\n  \t\tcancelFn.call(window, id);\r\n  \t}\r\n  }\n\n  var Util = {\n    __proto__: null,\n    extend: extend,\n    create: create$2,\n    bind: bind,\n    get lastId () { return lastId; },\n    stamp: stamp,\n    throttle: throttle,\n    wrapNum: wrapNum,\n    falseFn: falseFn,\n    formatNum: formatNum,\n    trim: trim,\n    splitWords: splitWords,\n    setOptions: setOptions,\n    getParamString: getParamString,\n    template: template,\n    isArray: isArray,\n    indexOf: indexOf,\n    emptyImageUrl: emptyImageUrl,\n    requestFn: requestFn,\n    cancelFn: cancelFn,\n    requestAnimFrame: requestAnimFrame,\n    cancelAnimFrame: cancelAnimFrame\n  };\n\n  // @class Class\r\n  // @aka L.Class\r\n\r\n  // @section\r\n  // @uninheritable\r\n\r\n  // Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\n  function Class() {}\r\n\r\n  Class.extend = function (props) {\r\n\r\n  \t// @function extend(props: Object): Function\r\n  \t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n  \t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n  \tvar NewClass = function () {\r\n\r\n  \t\tsetOptions(this);\r\n\r\n  \t\t// call the constructor\r\n  \t\tif (this.initialize) {\r\n  \t\t\tthis.initialize.apply(this, arguments);\r\n  \t\t}\r\n\r\n  \t\t// call all constructor hooks\r\n  \t\tthis.callInitHooks();\r\n  \t};\r\n\r\n  \tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n  \tvar proto = create$2(parentProto);\r\n  \tproto.constructor = NewClass;\r\n\r\n  \tNewClass.prototype = proto;\r\n\r\n  \t// inherit parent's statics\r\n  \tfor (var i in this) {\r\n  \t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n  \t\t\tNewClass[i] = this[i];\r\n  \t\t}\r\n  \t}\r\n\r\n  \t// mix static properties into the class\r\n  \tif (props.statics) {\r\n  \t\textend(NewClass, props.statics);\r\n  \t}\r\n\r\n  \t// mix includes into the prototype\r\n  \tif (props.includes) {\r\n  \t\tcheckDeprecatedMixinEvents(props.includes);\r\n  \t\textend.apply(null, [proto].concat(props.includes));\r\n  \t}\r\n\r\n  \t// mix given properties into the prototype\r\n  \textend(proto, props);\r\n  \tdelete proto.statics;\r\n  \tdelete proto.includes;\r\n\r\n  \t// merge options\r\n  \tif (proto.options) {\r\n  \t\tproto.options = parentProto.options ? create$2(parentProto.options) : {};\r\n  \t\textend(proto.options, props.options);\r\n  \t}\r\n\r\n  \tproto._initHooks = [];\r\n\r\n  \t// add method for calling all hooks\r\n  \tproto.callInitHooks = function () {\r\n\r\n  \t\tif (this._initHooksCalled) { return; }\r\n\r\n  \t\tif (parentProto.callInitHooks) {\r\n  \t\t\tparentProto.callInitHooks.call(this);\r\n  \t\t}\r\n\r\n  \t\tthis._initHooksCalled = true;\r\n\r\n  \t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n  \t\t\tproto._initHooks[i].call(this);\r\n  \t\t}\r\n  \t};\r\n\r\n  \treturn NewClass;\r\n  };\r\n\r\n\r\n  // @function include(properties: Object): this\r\n  // [Includes a mixin](#class-includes) into the current class.\r\n  Class.include = function (props) {\r\n  \tvar parentOptions = this.prototype.options;\r\n  \textend(this.prototype, props);\r\n  \tif (props.options) {\r\n  \t\tthis.prototype.options = parentOptions;\r\n  \t\tthis.mergeOptions(props.options);\r\n  \t}\r\n  \treturn this;\r\n  };\r\n\r\n  // @function mergeOptions(options: Object): this\r\n  // [Merges `options`](#class-options) into the defaults of the class.\r\n  Class.mergeOptions = function (options) {\r\n  \textend(this.prototype.options, options);\r\n  \treturn this;\r\n  };\r\n\r\n  // @function addInitHook(fn: Function): this\r\n  // Adds a [constructor hook](#class-constructor-hooks) to the class.\r\n  Class.addInitHook = function (fn) { // (Function) || (String, args...)\r\n  \tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n  \tvar init = typeof fn === 'function' ? fn : function () {\r\n  \t\tthis[fn].apply(this, args);\r\n  \t};\r\n\r\n  \tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n  \tthis.prototype._initHooks.push(init);\r\n  \treturn this;\r\n  };\r\n\r\n  function checkDeprecatedMixinEvents(includes) {\r\n  \tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n  \tincludes = isArray(includes) ? includes : [includes];\r\n\r\n  \tfor (var i = 0; i < includes.length; i++) {\r\n  \t\tif (includes[i] === L.Mixin.Events) {\r\n  \t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n  \t\t\t\t'this property will be removed in future releases, ' +\r\n  \t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n  \t\t}\r\n  \t}\r\n  }\n\n  /*\r\n   * @class Evented\r\n   * @aka L.Evented\r\n   * @inherits Class\r\n   *\r\n   * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * map.on('click', function(e) {\r\n   * \talert(e.latlng);\r\n   * } );\r\n   * ```\r\n   *\r\n   * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n   *\r\n   * ```js\r\n   * function onClick(e) { ... }\r\n   *\r\n   * map.on('click', onClick);\r\n   * map.off('click', onClick);\r\n   * ```\r\n   */\r\n\r\n  var Events = {\r\n  \t/* @method on(type: String, fn: Function, context?: Object): this\r\n  \t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n  \t *\r\n  \t * @alternative\r\n  \t * @method on(eventMap: Object): this\r\n  \t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n  \t */\r\n  \ton: function (types, fn, context) {\r\n\r\n  \t\t// types can be a map of types/handlers\r\n  \t\tif (typeof types === 'object') {\r\n  \t\t\tfor (var type in types) {\r\n  \t\t\t\t// we don't process space-separated events here for performance;\r\n  \t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n  \t\t\t\tthis._on(type, types[type], fn);\r\n  \t\t\t}\r\n\r\n  \t\t} else {\r\n  \t\t\t// types can be a string of space-separated words\r\n  \t\t\ttypes = splitWords(types);\r\n\r\n  \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n  \t\t\t\tthis._on(types[i], fn, context);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t/* @method off(type: String, fn?: Function, context?: Object): this\r\n  \t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n  \t *\r\n  \t * @alternative\r\n  \t * @method off(eventMap: Object): this\r\n  \t * Removes a set of type/listener pairs.\r\n  \t *\r\n  \t * @alternative\r\n  \t * @method off: this\r\n  \t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n  \t */\r\n  \toff: function (types, fn, context) {\r\n\r\n  \t\tif (!arguments.length) {\r\n  \t\t\t// clear all listeners if called without arguments\r\n  \t\t\tdelete this._events;\r\n\r\n  \t\t} else if (typeof types === 'object') {\r\n  \t\t\tfor (var type in types) {\r\n  \t\t\t\tthis._off(type, types[type], fn);\r\n  \t\t\t}\r\n\r\n  \t\t} else {\r\n  \t\t\ttypes = splitWords(types);\r\n\r\n  \t\t\tvar removeAll = arguments.length === 1;\r\n  \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n  \t\t\t\tif (removeAll) {\r\n  \t\t\t\t\tthis._off(types[i]);\r\n  \t\t\t\t} else {\r\n  \t\t\t\t\tthis._off(types[i], fn, context);\r\n  \t\t\t\t}\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// attach listener (without syntactic sugar now)\r\n  \t_on: function (type, fn, context, _once) {\r\n  \t\tif (typeof fn !== 'function') {\r\n  \t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\t// check if fn already there\r\n  \t\tif (this._listens(type, fn, context) !== false) {\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tif (context === this) {\r\n  \t\t\t// Less memory footprint.\r\n  \t\t\tcontext = undefined;\r\n  \t\t}\r\n\r\n  \t\tvar newListener = {fn: fn, ctx: context};\r\n  \t\tif (_once) {\r\n  \t\t\tnewListener.once = true;\r\n  \t\t}\r\n\r\n  \t\tthis._events = this._events || {};\r\n  \t\tthis._events[type] = this._events[type] || [];\r\n  \t\tthis._events[type].push(newListener);\r\n  \t},\r\n\r\n  \t_off: function (type, fn, context) {\r\n  \t\tvar listeners,\r\n  \t\t    i,\r\n  \t\t    len;\r\n\r\n  \t\tif (!this._events) {\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tlisteners = this._events[type];\r\n  \t\tif (!listeners) {\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tif (arguments.length === 1) { // remove all\r\n  \t\t\tif (this._firingCount) {\r\n  \t\t\t\t// Set all removed listeners to noop\r\n  \t\t\t\t// so they are not called if remove happens in fire\r\n  \t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n  \t\t\t\t\tlisteners[i].fn = falseFn;\r\n  \t\t\t\t}\r\n  \t\t\t}\r\n  \t\t\t// clear all listeners for a type if function isn't specified\r\n  \t\t\tdelete this._events[type];\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tif (typeof fn !== 'function') {\r\n  \t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\t// find fn and remove it\r\n  \t\tvar index = this._listens(type, fn, context);\r\n  \t\tif (index !== false) {\r\n  \t\t\tvar listener = listeners[index];\r\n  \t\t\tif (this._firingCount) {\r\n  \t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n  \t\t\t\tlistener.fn = falseFn;\r\n\r\n  \t\t\t\t/* copy array in case events are being fired */\r\n  \t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n  \t\t\t}\r\n  \t\t\tlisteners.splice(index, 1);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n  \t// Fires an event of the specified type. You can optionally provide a data\r\n  \t// object — the first argument of the listener function will contain its\r\n  \t// properties. The event can optionally be propagated to event parents.\r\n  \tfire: function (type, data, propagate) {\r\n  \t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n  \t\tvar event = extend({}, data, {\r\n  \t\t\ttype: type,\r\n  \t\t\ttarget: this,\r\n  \t\t\tsourceTarget: data && data.sourceTarget || this\r\n  \t\t});\r\n\r\n  \t\tif (this._events) {\r\n  \t\t\tvar listeners = this._events[type];\r\n  \t\t\tif (listeners) {\r\n  \t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n  \t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n  \t\t\t\t\tvar l = listeners[i];\r\n  \t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n  \t\t\t\t\tvar fn = l.fn;\r\n  \t\t\t\t\tif (l.once) {\r\n  \t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n  \t\t\t\t\t}\r\n  \t\t\t\t\tfn.call(l.ctx || this, event);\r\n  \t\t\t\t}\r\n\r\n  \t\t\t\tthis._firingCount--;\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\tif (propagate) {\r\n  \t\t\t// propagate the event to parents (set with addEventParent)\r\n  \t\t\tthis._propagateEvent(event);\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method listens(type: String, propagate?: Boolean): Boolean\r\n  \t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n  \t// Returns `true` if a particular event type has any listeners attached to it.\r\n  \t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n  \tlistens: function (type, fn, context, propagate) {\r\n  \t\tif (typeof type !== 'string') {\r\n  \t\t\tconsole.warn('\"string\" type argument expected');\r\n  \t\t}\r\n\r\n  \t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n  \t\tvar _fn = fn;\r\n  \t\tif (typeof fn !== 'function') {\r\n  \t\t\tpropagate = !!fn;\r\n  \t\t\t_fn = undefined;\r\n  \t\t\tcontext = undefined;\r\n  \t\t}\r\n\r\n  \t\tvar listeners = this._events && this._events[type];\r\n  \t\tif (listeners && listeners.length) {\r\n  \t\t\tif (this._listens(type, _fn, context) !== false) {\r\n  \t\t\t\treturn true;\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\tif (propagate) {\r\n  \t\t\t// also check parents for listeners if event propagates\r\n  \t\t\tfor (var id in this._eventParents) {\r\n  \t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n  \t\t\t}\r\n  \t\t}\r\n  \t\treturn false;\r\n  \t},\r\n\r\n  \t// returns the index (number) or false\r\n  \t_listens: function (type, fn, context) {\r\n  \t\tif (!this._events) {\r\n  \t\t\treturn false;\r\n  \t\t}\r\n\r\n  \t\tvar listeners = this._events[type] || [];\r\n  \t\tif (!fn) {\r\n  \t\t\treturn !!listeners.length;\r\n  \t\t}\r\n\r\n  \t\tif (context === this) {\r\n  \t\t\t// Less memory footprint.\r\n  \t\t\tcontext = undefined;\r\n  \t\t}\r\n\r\n  \t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n  \t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n  \t\t\t\treturn i;\r\n  \t\t\t}\r\n  \t\t}\r\n  \t\treturn false;\r\n\r\n  \t},\r\n\r\n  \t// @method once(…): this\r\n  \t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n  \tonce: function (types, fn, context) {\r\n\r\n  \t\t// types can be a map of types/handlers\r\n  \t\tif (typeof types === 'object') {\r\n  \t\t\tfor (var type in types) {\r\n  \t\t\t\t// we don't process space-separated events here for performance;\r\n  \t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n  \t\t\t\tthis._on(type, types[type], fn, true);\r\n  \t\t\t}\r\n\r\n  \t\t} else {\r\n  \t\t\t// types can be a string of space-separated words\r\n  \t\t\ttypes = splitWords(types);\r\n\r\n  \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n  \t\t\t\tthis._on(types[i], fn, context, true);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method addEventParent(obj: Evented): this\r\n  \t// Adds an event parent - an `Evented` that will receive propagated events\r\n  \taddEventParent: function (obj) {\r\n  \t\tthis._eventParents = this._eventParents || {};\r\n  \t\tthis._eventParents[stamp(obj)] = obj;\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method removeEventParent(obj: Evented): this\r\n  \t// Removes an event parent, so it will stop receiving propagated events\r\n  \tremoveEventParent: function (obj) {\r\n  \t\tif (this._eventParents) {\r\n  \t\t\tdelete this._eventParents[stamp(obj)];\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_propagateEvent: function (e) {\r\n  \t\tfor (var id in this._eventParents) {\r\n  \t\t\tthis._eventParents[id].fire(e.type, extend({\r\n  \t\t\t\tlayer: e.target,\r\n  \t\t\t\tpropagatedFrom: e.target\r\n  \t\t\t}, e), true);\r\n  \t\t}\r\n  \t}\r\n  };\r\n\r\n  // aliases; we should ditch those eventually\r\n\r\n  // @method addEventListener(…): this\r\n  // Alias to [`on(…)`](#evented-on)\r\n  Events.addEventListener = Events.on;\r\n\r\n  // @method removeEventListener(…): this\r\n  // Alias to [`off(…)`](#evented-off)\r\n\r\n  // @method clearAllEventListeners(…): this\r\n  // Alias to [`off()`](#evented-off)\r\n  Events.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n  // @method addOneTimeEventListener(…): this\r\n  // Alias to [`once(…)`](#evented-once)\r\n  Events.addOneTimeEventListener = Events.once;\r\n\r\n  // @method fireEvent(…): this\r\n  // Alias to [`fire(…)`](#evented-fire)\r\n  Events.fireEvent = Events.fire;\r\n\r\n  // @method hasEventListeners(…): Boolean\r\n  // Alias to [`listens(…)`](#evented-listens)\r\n  Events.hasEventListeners = Events.listens;\r\n\r\n  var Evented = Class.extend(Events);\n\n  /*\r\n   * @class Point\r\n   * @aka L.Point\r\n   *\r\n   * Represents a point with `x` and `y` coordinates in pixels.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var point = L.point(200, 300);\r\n   * ```\r\n   *\r\n   * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n   *\r\n   * ```js\r\n   * map.panBy([200, 300]);\r\n   * map.panBy(L.point(200, 300));\r\n   * ```\r\n   *\r\n   * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n   * which means new classes can't inherit from it, and new methods\r\n   * can't be added to it with the `include` function.\r\n   */\r\n\r\n  function Point(x, y, round) {\r\n  \t// @property x: Number; The `x` coordinate of the point\r\n  \tthis.x = (round ? Math.round(x) : x);\r\n  \t// @property y: Number; The `y` coordinate of the point\r\n  \tthis.y = (round ? Math.round(y) : y);\r\n  }\r\n\r\n  var trunc = Math.trunc || function (v) {\r\n  \treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n  };\r\n\r\n  Point.prototype = {\r\n\r\n  \t// @method clone(): Point\r\n  \t// Returns a copy of the current point.\r\n  \tclone: function () {\r\n  \t\treturn new Point(this.x, this.y);\r\n  \t},\r\n\r\n  \t// @method add(otherPoint: Point): Point\r\n  \t// Returns the result of addition of the current and the given points.\r\n  \tadd: function (point) {\r\n  \t\t// non-destructive, returns a new point\r\n  \t\treturn this.clone()._add(toPoint(point));\r\n  \t},\r\n\r\n  \t_add: function (point) {\r\n  \t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n  \t\tthis.x += point.x;\r\n  \t\tthis.y += point.y;\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method subtract(otherPoint: Point): Point\r\n  \t// Returns the result of subtraction of the given point from the current.\r\n  \tsubtract: function (point) {\r\n  \t\treturn this.clone()._subtract(toPoint(point));\r\n  \t},\r\n\r\n  \t_subtract: function (point) {\r\n  \t\tthis.x -= point.x;\r\n  \t\tthis.y -= point.y;\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method divideBy(num: Number): Point\r\n  \t// Returns the result of division of the current point by the given number.\r\n  \tdivideBy: function (num) {\r\n  \t\treturn this.clone()._divideBy(num);\r\n  \t},\r\n\r\n  \t_divideBy: function (num) {\r\n  \t\tthis.x /= num;\r\n  \t\tthis.y /= num;\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method multiplyBy(num: Number): Point\r\n  \t// Returns the result of multiplication of the current point by the given number.\r\n  \tmultiplyBy: function (num) {\r\n  \t\treturn this.clone()._multiplyBy(num);\r\n  \t},\r\n\r\n  \t_multiplyBy: function (num) {\r\n  \t\tthis.x *= num;\r\n  \t\tthis.y *= num;\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method scaleBy(scale: Point): Point\r\n  \t// Multiply each coordinate of the current point by each coordinate of\r\n  \t// `scale`. In linear algebra terms, multiply the point by the\r\n  \t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n  \t// defined by `scale`.\r\n  \tscaleBy: function (point) {\r\n  \t\treturn new Point(this.x * point.x, this.y * point.y);\r\n  \t},\r\n\r\n  \t// @method unscaleBy(scale: Point): Point\r\n  \t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n  \t// each coordinate of `scale`.\r\n  \tunscaleBy: function (point) {\r\n  \t\treturn new Point(this.x / point.x, this.y / point.y);\r\n  \t},\r\n\r\n  \t// @method round(): Point\r\n  \t// Returns a copy of the current point with rounded coordinates.\r\n  \tround: function () {\r\n  \t\treturn this.clone()._round();\r\n  \t},\r\n\r\n  \t_round: function () {\r\n  \t\tthis.x = Math.round(this.x);\r\n  \t\tthis.y = Math.round(this.y);\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method floor(): Point\r\n  \t// Returns a copy of the current point with floored coordinates (rounded down).\r\n  \tfloor: function () {\r\n  \t\treturn this.clone()._floor();\r\n  \t},\r\n\r\n  \t_floor: function () {\r\n  \t\tthis.x = Math.floor(this.x);\r\n  \t\tthis.y = Math.floor(this.y);\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method ceil(): Point\r\n  \t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n  \tceil: function () {\r\n  \t\treturn this.clone()._ceil();\r\n  \t},\r\n\r\n  \t_ceil: function () {\r\n  \t\tthis.x = Math.ceil(this.x);\r\n  \t\tthis.y = Math.ceil(this.y);\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method trunc(): Point\r\n  \t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n  \ttrunc: function () {\r\n  \t\treturn this.clone()._trunc();\r\n  \t},\r\n\r\n  \t_trunc: function () {\r\n  \t\tthis.x = trunc(this.x);\r\n  \t\tthis.y = trunc(this.y);\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method distanceTo(otherPoint: Point): Number\r\n  \t// Returns the cartesian distance between the current and the given points.\r\n  \tdistanceTo: function (point) {\r\n  \t\tpoint = toPoint(point);\r\n\r\n  \t\tvar x = point.x - this.x,\r\n  \t\t    y = point.y - this.y;\r\n\r\n  \t\treturn Math.sqrt(x * x + y * y);\r\n  \t},\r\n\r\n  \t// @method equals(otherPoint: Point): Boolean\r\n  \t// Returns `true` if the given point has the same coordinates.\r\n  \tequals: function (point) {\r\n  \t\tpoint = toPoint(point);\r\n\r\n  \t\treturn point.x === this.x &&\r\n  \t\t       point.y === this.y;\r\n  \t},\r\n\r\n  \t// @method contains(otherPoint: Point): Boolean\r\n  \t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n  \tcontains: function (point) {\r\n  \t\tpoint = toPoint(point);\r\n\r\n  \t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n  \t\t       Math.abs(point.y) <= Math.abs(this.y);\r\n  \t},\r\n\r\n  \t// @method toString(): String\r\n  \t// Returns a string representation of the point for debugging purposes.\r\n  \ttoString: function () {\r\n  \t\treturn 'Point(' +\r\n  \t\t        formatNum(this.x) + ', ' +\r\n  \t\t        formatNum(this.y) + ')';\r\n  \t}\r\n  };\r\n\r\n  // @factory L.point(x: Number, y: Number, round?: Boolean)\r\n  // Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n  // @alternative\r\n  // @factory L.point(coords: Number[])\r\n  // Expects an array of the form `[x, y]` instead.\r\n\r\n  // @alternative\r\n  // @factory L.point(coords: Object)\r\n  // Expects a plain object of the form `{x: Number, y: Number}` instead.\r\n  function toPoint(x, y, round) {\r\n  \tif (x instanceof Point) {\r\n  \t\treturn x;\r\n  \t}\r\n  \tif (isArray(x)) {\r\n  \t\treturn new Point(x[0], x[1]);\r\n  \t}\r\n  \tif (x === undefined || x === null) {\r\n  \t\treturn x;\r\n  \t}\r\n  \tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n  \t\treturn new Point(x.x, x.y);\r\n  \t}\r\n  \treturn new Point(x, y, round);\r\n  }\n\n  /*\r\n   * @class Bounds\r\n   * @aka L.Bounds\r\n   *\r\n   * Represents a rectangular area in pixel coordinates.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var p1 = L.point(10, 10),\r\n   * p2 = L.point(40, 60),\r\n   * bounds = L.bounds(p1, p2);\r\n   * ```\r\n   *\r\n   * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n   *\r\n   * ```js\r\n   * otherBounds.intersects([[10, 10], [40, 60]]);\r\n   * ```\r\n   *\r\n   * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n   * which means new classes can't inherit from it, and new methods\r\n   * can't be added to it with the `include` function.\r\n   */\r\n\r\n  function Bounds(a, b) {\r\n  \tif (!a) { return; }\r\n\r\n  \tvar points = b ? [a, b] : a;\r\n\r\n  \tfor (var i = 0, len = points.length; i < len; i++) {\r\n  \t\tthis.extend(points[i]);\r\n  \t}\r\n  }\r\n\r\n  Bounds.prototype = {\r\n  \t// @method extend(point: Point): this\r\n  \t// Extends the bounds to contain the given point.\r\n\r\n  \t// @alternative\r\n  \t// @method extend(otherBounds: Bounds): this\r\n  \t// Extend the bounds to contain the given bounds\r\n  \textend: function (obj) {\r\n  \t\tvar min2, max2;\r\n  \t\tif (!obj) { return this; }\r\n\r\n  \t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n  \t\t\tmin2 = max2 = toPoint(obj);\r\n  \t\t} else {\r\n  \t\t\tobj = toBounds(obj);\r\n  \t\t\tmin2 = obj.min;\r\n  \t\t\tmax2 = obj.max;\r\n\r\n  \t\t\tif (!min2 || !max2) { return this; }\r\n  \t\t}\r\n\r\n  \t\t// @property min: Point\r\n  \t\t// The top left corner of the rectangle.\r\n  \t\t// @property max: Point\r\n  \t\t// The bottom right corner of the rectangle.\r\n  \t\tif (!this.min && !this.max) {\r\n  \t\t\tthis.min = min2.clone();\r\n  \t\t\tthis.max = max2.clone();\r\n  \t\t} else {\r\n  \t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n  \t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n  \t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n  \t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method getCenter(round?: Boolean): Point\r\n  \t// Returns the center point of the bounds.\r\n  \tgetCenter: function (round) {\r\n  \t\treturn toPoint(\r\n  \t\t        (this.min.x + this.max.x) / 2,\r\n  \t\t        (this.min.y + this.max.y) / 2, round);\r\n  \t},\r\n\r\n  \t// @method getBottomLeft(): Point\r\n  \t// Returns the bottom-left point of the bounds.\r\n  \tgetBottomLeft: function () {\r\n  \t\treturn toPoint(this.min.x, this.max.y);\r\n  \t},\r\n\r\n  \t// @method getTopRight(): Point\r\n  \t// Returns the top-right point of the bounds.\r\n  \tgetTopRight: function () { // -> Point\r\n  \t\treturn toPoint(this.max.x, this.min.y);\r\n  \t},\r\n\r\n  \t// @method getTopLeft(): Point\r\n  \t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n  \tgetTopLeft: function () {\r\n  \t\treturn this.min; // left, top\r\n  \t},\r\n\r\n  \t// @method getBottomRight(): Point\r\n  \t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n  \tgetBottomRight: function () {\r\n  \t\treturn this.max; // right, bottom\r\n  \t},\r\n\r\n  \t// @method getSize(): Point\r\n  \t// Returns the size of the given bounds\r\n  \tgetSize: function () {\r\n  \t\treturn this.max.subtract(this.min);\r\n  \t},\r\n\r\n  \t// @method contains(otherBounds: Bounds): Boolean\r\n  \t// Returns `true` if the rectangle contains the given one.\r\n  \t// @alternative\r\n  \t// @method contains(point: Point): Boolean\r\n  \t// Returns `true` if the rectangle contains the given point.\r\n  \tcontains: function (obj) {\r\n  \t\tvar min, max;\r\n\r\n  \t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n  \t\t\tobj = toPoint(obj);\r\n  \t\t} else {\r\n  \t\t\tobj = toBounds(obj);\r\n  \t\t}\r\n\r\n  \t\tif (obj instanceof Bounds) {\r\n  \t\t\tmin = obj.min;\r\n  \t\t\tmax = obj.max;\r\n  \t\t} else {\r\n  \t\t\tmin = max = obj;\r\n  \t\t}\r\n\r\n  \t\treturn (min.x >= this.min.x) &&\r\n  \t\t       (max.x <= this.max.x) &&\r\n  \t\t       (min.y >= this.min.y) &&\r\n  \t\t       (max.y <= this.max.y);\r\n  \t},\r\n\r\n  \t// @method intersects(otherBounds: Bounds): Boolean\r\n  \t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n  \t// intersect if they have at least one point in common.\r\n  \tintersects: function (bounds) { // (Bounds) -> Boolean\r\n  \t\tbounds = toBounds(bounds);\r\n\r\n  \t\tvar min = this.min,\r\n  \t\t    max = this.max,\r\n  \t\t    min2 = bounds.min,\r\n  \t\t    max2 = bounds.max,\r\n  \t\t    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n  \t\t    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n  \t\treturn xIntersects && yIntersects;\r\n  \t},\r\n\r\n  \t// @method overlaps(otherBounds: Bounds): Boolean\r\n  \t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n  \t// overlap if their intersection is an area.\r\n  \toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n  \t\tbounds = toBounds(bounds);\r\n\r\n  \t\tvar min = this.min,\r\n  \t\t    max = this.max,\r\n  \t\t    min2 = bounds.min,\r\n  \t\t    max2 = bounds.max,\r\n  \t\t    xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n  \t\t    yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n  \t\treturn xOverlaps && yOverlaps;\r\n  \t},\r\n\r\n  \t// @method isValid(): Boolean\r\n  \t// Returns `true` if the bounds are properly initialized.\r\n  \tisValid: function () {\r\n  \t\treturn !!(this.min && this.max);\r\n  \t},\r\n\r\n\r\n  \t// @method pad(bufferRatio: Number): Bounds\r\n  \t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n  \t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n  \t// Negative values will retract the bounds.\r\n  \tpad: function (bufferRatio) {\r\n  \t\tvar min = this.min,\r\n  \t\tmax = this.max,\r\n  \t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n  \t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n  \t\treturn toBounds(\r\n  \t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n  \t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n  \t},\r\n\r\n\r\n  \t// @method equals(otherBounds: Bounds): Boolean\r\n  \t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n  \tequals: function (bounds) {\r\n  \t\tif (!bounds) { return false; }\r\n\r\n  \t\tbounds = toBounds(bounds);\r\n\r\n  \t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n  \t\t\tthis.max.equals(bounds.getBottomRight());\r\n  \t},\r\n  };\r\n\r\n\r\n  // @factory L.bounds(corner1: Point, corner2: Point)\r\n  // Creates a Bounds object from two corners coordinate pairs.\r\n  // @alternative\r\n  // @factory L.bounds(points: Point[])\r\n  // Creates a Bounds object from the given array of points.\r\n  function toBounds(a, b) {\r\n  \tif (!a || a instanceof Bounds) {\r\n  \t\treturn a;\r\n  \t}\r\n  \treturn new Bounds(a, b);\r\n  }\n\n  /*\r\n   * @class LatLngBounds\r\n   * @aka L.LatLngBounds\r\n   *\r\n   * Represents a rectangular geographical area on a map.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var corner1 = L.latLng(40.712, -74.227),\r\n   * corner2 = L.latLng(40.774, -74.125),\r\n   * bounds = L.latLngBounds(corner1, corner2);\r\n   * ```\r\n   *\r\n   * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n   *\r\n   * ```js\r\n   * map.fitBounds([\r\n   * \t[40.712, -74.227],\r\n   * \t[40.774, -74.125]\r\n   * ]);\r\n   * ```\r\n   *\r\n   * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n   *\r\n   * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n   * which means new classes can't inherit from it, and new methods\r\n   * can't be added to it with the `include` function.\r\n   */\r\n\r\n  function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n  \tif (!corner1) { return; }\r\n\r\n  \tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n  \tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n  \t\tthis.extend(latlngs[i]);\r\n  \t}\r\n  }\r\n\r\n  LatLngBounds.prototype = {\r\n\r\n  \t// @method extend(latlng: LatLng): this\r\n  \t// Extend the bounds to contain the given point\r\n\r\n  \t// @alternative\r\n  \t// @method extend(otherBounds: LatLngBounds): this\r\n  \t// Extend the bounds to contain the given bounds\r\n  \textend: function (obj) {\r\n  \t\tvar sw = this._southWest,\r\n  \t\t    ne = this._northEast,\r\n  \t\t    sw2, ne2;\r\n\r\n  \t\tif (obj instanceof LatLng) {\r\n  \t\t\tsw2 = obj;\r\n  \t\t\tne2 = obj;\r\n\r\n  \t\t} else if (obj instanceof LatLngBounds) {\r\n  \t\t\tsw2 = obj._southWest;\r\n  \t\t\tne2 = obj._northEast;\r\n\r\n  \t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n  \t\t} else {\r\n  \t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n  \t\t}\r\n\r\n  \t\tif (!sw && !ne) {\r\n  \t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n  \t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n  \t\t} else {\r\n  \t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n  \t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n  \t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n  \t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method pad(bufferRatio: Number): LatLngBounds\r\n  \t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n  \t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n  \t// Negative values will retract the bounds.\r\n  \tpad: function (bufferRatio) {\r\n  \t\tvar sw = this._southWest,\r\n  \t\t    ne = this._northEast,\r\n  \t\t    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n  \t\t    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n  \t\treturn new LatLngBounds(\r\n  \t\t        new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n  \t\t        new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n  \t},\r\n\r\n  \t// @method getCenter(): LatLng\r\n  \t// Returns the center point of the bounds.\r\n  \tgetCenter: function () {\r\n  \t\treturn new LatLng(\r\n  \t\t        (this._southWest.lat + this._northEast.lat) / 2,\r\n  \t\t        (this._southWest.lng + this._northEast.lng) / 2);\r\n  \t},\r\n\r\n  \t// @method getSouthWest(): LatLng\r\n  \t// Returns the south-west point of the bounds.\r\n  \tgetSouthWest: function () {\r\n  \t\treturn this._southWest;\r\n  \t},\r\n\r\n  \t// @method getNorthEast(): LatLng\r\n  \t// Returns the north-east point of the bounds.\r\n  \tgetNorthEast: function () {\r\n  \t\treturn this._northEast;\r\n  \t},\r\n\r\n  \t// @method getNorthWest(): LatLng\r\n  \t// Returns the north-west point of the bounds.\r\n  \tgetNorthWest: function () {\r\n  \t\treturn new LatLng(this.getNorth(), this.getWest());\r\n  \t},\r\n\r\n  \t// @method getSouthEast(): LatLng\r\n  \t// Returns the south-east point of the bounds.\r\n  \tgetSouthEast: function () {\r\n  \t\treturn new LatLng(this.getSouth(), this.getEast());\r\n  \t},\r\n\r\n  \t// @method getWest(): Number\r\n  \t// Returns the west longitude of the bounds\r\n  \tgetWest: function () {\r\n  \t\treturn this._southWest.lng;\r\n  \t},\r\n\r\n  \t// @method getSouth(): Number\r\n  \t// Returns the south latitude of the bounds\r\n  \tgetSouth: function () {\r\n  \t\treturn this._southWest.lat;\r\n  \t},\r\n\r\n  \t// @method getEast(): Number\r\n  \t// Returns the east longitude of the bounds\r\n  \tgetEast: function () {\r\n  \t\treturn this._northEast.lng;\r\n  \t},\r\n\r\n  \t// @method getNorth(): Number\r\n  \t// Returns the north latitude of the bounds\r\n  \tgetNorth: function () {\r\n  \t\treturn this._northEast.lat;\r\n  \t},\r\n\r\n  \t// @method contains(otherBounds: LatLngBounds): Boolean\r\n  \t// Returns `true` if the rectangle contains the given one.\r\n\r\n  \t// @alternative\r\n  \t// @method contains (latlng: LatLng): Boolean\r\n  \t// Returns `true` if the rectangle contains the given point.\r\n  \tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n  \t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n  \t\t\tobj = toLatLng(obj);\r\n  \t\t} else {\r\n  \t\t\tobj = toLatLngBounds(obj);\r\n  \t\t}\r\n\r\n  \t\tvar sw = this._southWest,\r\n  \t\t    ne = this._northEast,\r\n  \t\t    sw2, ne2;\r\n\r\n  \t\tif (obj instanceof LatLngBounds) {\r\n  \t\t\tsw2 = obj.getSouthWest();\r\n  \t\t\tne2 = obj.getNorthEast();\r\n  \t\t} else {\r\n  \t\t\tsw2 = ne2 = obj;\r\n  \t\t}\r\n\r\n  \t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n  \t\t       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n  \t},\r\n\r\n  \t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n  \t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n  \tintersects: function (bounds) {\r\n  \t\tbounds = toLatLngBounds(bounds);\r\n\r\n  \t\tvar sw = this._southWest,\r\n  \t\t    ne = this._northEast,\r\n  \t\t    sw2 = bounds.getSouthWest(),\r\n  \t\t    ne2 = bounds.getNorthEast(),\r\n\r\n  \t\t    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n  \t\t    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n  \t\treturn latIntersects && lngIntersects;\r\n  \t},\r\n\r\n  \t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n  \t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n  \toverlaps: function (bounds) {\r\n  \t\tbounds = toLatLngBounds(bounds);\r\n\r\n  \t\tvar sw = this._southWest,\r\n  \t\t    ne = this._northEast,\r\n  \t\t    sw2 = bounds.getSouthWest(),\r\n  \t\t    ne2 = bounds.getNorthEast(),\r\n\r\n  \t\t    latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n  \t\t    lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n  \t\treturn latOverlaps && lngOverlaps;\r\n  \t},\r\n\r\n  \t// @method toBBoxString(): String\r\n  \t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n  \ttoBBoxString: function () {\r\n  \t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n  \t},\r\n\r\n  \t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n  \t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n  \tequals: function (bounds, maxMargin) {\r\n  \t\tif (!bounds) { return false; }\r\n\r\n  \t\tbounds = toLatLngBounds(bounds);\r\n\r\n  \t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n  \t\t       this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n  \t},\r\n\r\n  \t// @method isValid(): Boolean\r\n  \t// Returns `true` if the bounds are properly initialized.\r\n  \tisValid: function () {\r\n  \t\treturn !!(this._southWest && this._northEast);\r\n  \t}\r\n  };\r\n\r\n  // TODO International date line?\r\n\r\n  // @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n  // Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n  // @alternative\r\n  // @factory L.latLngBounds(latlngs: LatLng[])\r\n  // Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\n  function toLatLngBounds(a, b) {\r\n  \tif (a instanceof LatLngBounds) {\r\n  \t\treturn a;\r\n  \t}\r\n  \treturn new LatLngBounds(a, b);\r\n  }\n\n  /* @class LatLng\r\n   * @aka L.LatLng\r\n   *\r\n   * Represents a geographical point with a certain latitude and longitude.\r\n   *\r\n   * @example\r\n   *\r\n   * ```\r\n   * var latlng = L.latLng(50.5, 30.5);\r\n   * ```\r\n   *\r\n   * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n   *\r\n   * ```\r\n   * map.panTo([50, 30]);\r\n   * map.panTo({lon: 30, lat: 50});\r\n   * map.panTo({lat: 50, lng: 30});\r\n   * map.panTo(L.latLng(50, 30));\r\n   * ```\r\n   *\r\n   * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n   * which means new classes can't inherit from it, and new methods\r\n   * can't be added to it with the `include` function.\r\n   */\r\n\r\n  function LatLng(lat, lng, alt) {\r\n  \tif (isNaN(lat) || isNaN(lng)) {\r\n  \t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n  \t}\r\n\r\n  \t// @property lat: Number\r\n  \t// Latitude in degrees\r\n  \tthis.lat = +lat;\r\n\r\n  \t// @property lng: Number\r\n  \t// Longitude in degrees\r\n  \tthis.lng = +lng;\r\n\r\n  \t// @property alt: Number\r\n  \t// Altitude in meters (optional)\r\n  \tif (alt !== undefined) {\r\n  \t\tthis.alt = +alt;\r\n  \t}\r\n  }\r\n\r\n  LatLng.prototype = {\r\n  \t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n  \t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n  \tequals: function (obj, maxMargin) {\r\n  \t\tif (!obj) { return false; }\r\n\r\n  \t\tobj = toLatLng(obj);\r\n\r\n  \t\tvar margin = Math.max(\r\n  \t\t        Math.abs(this.lat - obj.lat),\r\n  \t\t        Math.abs(this.lng - obj.lng));\r\n\r\n  \t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n  \t},\r\n\r\n  \t// @method toString(): String\r\n  \t// Returns a string representation of the point (for debugging purposes).\r\n  \ttoString: function (precision) {\r\n  \t\treturn 'LatLng(' +\r\n  \t\t        formatNum(this.lat, precision) + ', ' +\r\n  \t\t        formatNum(this.lng, precision) + ')';\r\n  \t},\r\n\r\n  \t// @method distanceTo(otherLatLng: LatLng): Number\r\n  \t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n  \tdistanceTo: function (other) {\r\n  \t\treturn Earth.distance(this, toLatLng(other));\r\n  \t},\r\n\r\n  \t// @method wrap(): LatLng\r\n  \t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n  \twrap: function () {\r\n  \t\treturn Earth.wrapLatLng(this);\r\n  \t},\r\n\r\n  \t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n  \t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n  \ttoBounds: function (sizeInMeters) {\r\n  \t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n  \t\t    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n  \t\treturn toLatLngBounds(\r\n  \t\t        [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n  \t\t        [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n  \t},\r\n\r\n  \tclone: function () {\r\n  \t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n  \t}\r\n  };\r\n\r\n\r\n\r\n  // @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n  // Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n  // @alternative\r\n  // @factory L.latLng(coords: Array): LatLng\r\n  // Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n  // @alternative\r\n  // @factory L.latLng(coords: Object): LatLng\r\n  // Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\n  function toLatLng(a, b, c) {\r\n  \tif (a instanceof LatLng) {\r\n  \t\treturn a;\r\n  \t}\r\n  \tif (isArray(a) && typeof a[0] !== 'object') {\r\n  \t\tif (a.length === 3) {\r\n  \t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n  \t\t}\r\n  \t\tif (a.length === 2) {\r\n  \t\t\treturn new LatLng(a[0], a[1]);\r\n  \t\t}\r\n  \t\treturn null;\r\n  \t}\r\n  \tif (a === undefined || a === null) {\r\n  \t\treturn a;\r\n  \t}\r\n  \tif (typeof a === 'object' && 'lat' in a) {\r\n  \t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n  \t}\r\n  \tif (b === undefined) {\r\n  \t\treturn null;\r\n  \t}\r\n  \treturn new LatLng(a, b, c);\r\n  }\n\n  /*\r\n   * @namespace CRS\r\n   * @crs L.CRS.Base\r\n   * Object that defines coordinate reference systems for projecting\r\n   * geographical points into pixel (screen) coordinates and back (and to\r\n   * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n   * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n   *\r\n   * Leaflet defines the most usual CRSs by default. If you want to use a\r\n   * CRS not defined by default, take a look at the\r\n   * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n   *\r\n   * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n   * and can't be instantiated. Also, new classes can't inherit from them,\r\n   * and methods can't be added to them with the `include` function.\r\n   */\r\n\r\n  var CRS = {\r\n  \t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n  \t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n  \tlatLngToPoint: function (latlng, zoom) {\r\n  \t\tvar projectedPoint = this.projection.project(latlng),\r\n  \t\t    scale = this.scale(zoom);\r\n\r\n  \t\treturn this.transformation._transform(projectedPoint, scale);\r\n  \t},\r\n\r\n  \t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n  \t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n  \t// zoom into geographical coordinates.\r\n  \tpointToLatLng: function (point, zoom) {\r\n  \t\tvar scale = this.scale(zoom),\r\n  \t\t    untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n  \t\treturn this.projection.unproject(untransformedPoint);\r\n  \t},\r\n\r\n  \t// @method project(latlng: LatLng): Point\r\n  \t// Projects geographical coordinates into coordinates in units accepted for\r\n  \t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n  \tproject: function (latlng) {\r\n  \t\treturn this.projection.project(latlng);\r\n  \t},\r\n\r\n  \t// @method unproject(point: Point): LatLng\r\n  \t// Given a projected coordinate returns the corresponding LatLng.\r\n  \t// The inverse of `project`.\r\n  \tunproject: function (point) {\r\n  \t\treturn this.projection.unproject(point);\r\n  \t},\r\n\r\n  \t// @method scale(zoom: Number): Number\r\n  \t// Returns the scale used when transforming projected coordinates into\r\n  \t// pixel coordinates for a particular zoom. For example, it returns\r\n  \t// `256 * 2^zoom` for Mercator-based CRS.\r\n  \tscale: function (zoom) {\r\n  \t\treturn 256 * Math.pow(2, zoom);\r\n  \t},\r\n\r\n  \t// @method zoom(scale: Number): Number\r\n  \t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n  \t// factor of `scale`.\r\n  \tzoom: function (scale) {\r\n  \t\treturn Math.log(scale / 256) / Math.LN2;\r\n  \t},\r\n\r\n  \t// @method getProjectedBounds(zoom: Number): Bounds\r\n  \t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n  \tgetProjectedBounds: function (zoom) {\r\n  \t\tif (this.infinite) { return null; }\r\n\r\n  \t\tvar b = this.projection.bounds,\r\n  \t\t    s = this.scale(zoom),\r\n  \t\t    min = this.transformation.transform(b.min, s),\r\n  \t\t    max = this.transformation.transform(b.max, s);\r\n\r\n  \t\treturn new Bounds(min, max);\r\n  \t},\r\n\r\n  \t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n  \t// Returns the distance between two geographical coordinates.\r\n\r\n  \t// @property code: String\r\n  \t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n  \t//\r\n  \t// @property wrapLng: Number[]\r\n  \t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n  \t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n  \t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n  \t//\r\n  \t// @property wrapLat: Number[]\r\n  \t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n  \t// wrapLng: [min, max],\r\n  \t// wrapLat: [min, max],\r\n\r\n  \t// @property infinite: Boolean\r\n  \t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n  \tinfinite: false,\r\n\r\n  \t// @method wrapLatLng(latlng: LatLng): LatLng\r\n  \t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n  \t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n  \twrapLatLng: function (latlng) {\r\n  \t\tvar lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n  \t\t    lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n  \t\t    alt = latlng.alt;\r\n\r\n  \t\treturn new LatLng(lat, lng, alt);\r\n  \t},\r\n\r\n  \t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n  \t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n  \t// that its center is within the CRS's bounds.\r\n  \t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n  \twrapLatLngBounds: function (bounds) {\r\n  \t\tvar center = bounds.getCenter(),\r\n  \t\t    newCenter = this.wrapLatLng(center),\r\n  \t\t    latShift = center.lat - newCenter.lat,\r\n  \t\t    lngShift = center.lng - newCenter.lng;\r\n\r\n  \t\tif (latShift === 0 && lngShift === 0) {\r\n  \t\t\treturn bounds;\r\n  \t\t}\r\n\r\n  \t\tvar sw = bounds.getSouthWest(),\r\n  \t\t    ne = bounds.getNorthEast(),\r\n  \t\t    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n  \t\t    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n  \t\treturn new LatLngBounds(newSw, newNe);\r\n  \t}\r\n  };\n\n  /*\n   * @namespace CRS\n   * @crs L.CRS.Earth\n   *\n   * Serves as the base for CRS that are global such that they cover the earth.\n   * Can only be used as the base for other CRS and cannot be used directly,\n   * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n   * meters.\n   */\n\n  var Earth = extend({}, CRS, {\n  \twrapLng: [-180, 180],\n\n  \t// Mean Earth Radius, as recommended for use by\n  \t// the International Union of Geodesy and Geophysics,\n  \t// see https://rosettacode.org/wiki/Haversine_formula\n  \tR: 6371000,\n\n  \t// distance between two geographical points using spherical law of cosines approximation\n  \tdistance: function (latlng1, latlng2) {\n  \t\tvar rad = Math.PI / 180,\n  \t\t    lat1 = latlng1.lat * rad,\n  \t\t    lat2 = latlng2.lat * rad,\n  \t\t    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n  \t\t    sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n  \t\t    a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n  \t\t    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n  \t\treturn this.R * c;\n  \t}\n  });\n\n  /*\r\n   * @namespace Projection\r\n   * @projection L.Projection.SphericalMercator\r\n   *\r\n   * Spherical Mercator projection — the most common projection for online maps,\r\n   * used by almost all free and commercial tile providers. Assumes that Earth is\r\n   * a sphere. Used by the `EPSG:3857` CRS.\r\n   */\r\n\r\n  var earthRadius = 6378137;\r\n\r\n  var SphericalMercator = {\r\n\r\n  \tR: earthRadius,\r\n  \tMAX_LATITUDE: 85.0511287798,\r\n\r\n  \tproject: function (latlng) {\r\n  \t\tvar d = Math.PI / 180,\r\n  \t\t    max = this.MAX_LATITUDE,\r\n  \t\t    lat = Math.max(Math.min(max, latlng.lat), -max),\r\n  \t\t    sin = Math.sin(lat * d);\r\n\r\n  \t\treturn new Point(\r\n  \t\t\tthis.R * latlng.lng * d,\r\n  \t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n  \t},\r\n\r\n  \tunproject: function (point) {\r\n  \t\tvar d = 180 / Math.PI;\r\n\r\n  \t\treturn new LatLng(\r\n  \t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n  \t\t\tpoint.x * d / this.R);\r\n  \t},\r\n\r\n  \tbounds: (function () {\r\n  \t\tvar d = earthRadius * Math.PI;\r\n  \t\treturn new Bounds([-d, -d], [d, d]);\r\n  \t})()\r\n  };\n\n  /*\r\n   * @class Transformation\r\n   * @aka L.Transformation\r\n   *\r\n   * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n   * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n   * the reverse. Used by Leaflet in its projections code.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var transformation = L.transformation(2, 5, -1, 10),\r\n   * \tp = L.point(1, 2),\r\n   * \tp2 = transformation.transform(p), //  L.point(7, 8)\r\n   * \tp3 = transformation.untransform(p2); //  L.point(1, 2)\r\n   * ```\r\n   */\r\n\r\n\r\n  // factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n  // Creates a `Transformation` object with the given coefficients.\r\n  function Transformation(a, b, c, d) {\r\n  \tif (isArray(a)) {\r\n  \t\t// use array properties\r\n  \t\tthis._a = a[0];\r\n  \t\tthis._b = a[1];\r\n  \t\tthis._c = a[2];\r\n  \t\tthis._d = a[3];\r\n  \t\treturn;\r\n  \t}\r\n  \tthis._a = a;\r\n  \tthis._b = b;\r\n  \tthis._c = c;\r\n  \tthis._d = d;\r\n  }\r\n\r\n  Transformation.prototype = {\r\n  \t// @method transform(point: Point, scale?: Number): Point\r\n  \t// Returns a transformed point, optionally multiplied by the given scale.\r\n  \t// Only accepts actual `L.Point` instances, not arrays.\r\n  \ttransform: function (point, scale) { // (Point, Number) -> Point\r\n  \t\treturn this._transform(point.clone(), scale);\r\n  \t},\r\n\r\n  \t// destructive transform (faster)\r\n  \t_transform: function (point, scale) {\r\n  \t\tscale = scale || 1;\r\n  \t\tpoint.x = scale * (this._a * point.x + this._b);\r\n  \t\tpoint.y = scale * (this._c * point.y + this._d);\r\n  \t\treturn point;\r\n  \t},\r\n\r\n  \t// @method untransform(point: Point, scale?: Number): Point\r\n  \t// Returns the reverse transformation of the given point, optionally divided\r\n  \t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n  \tuntransform: function (point, scale) {\r\n  \t\tscale = scale || 1;\r\n  \t\treturn new Point(\r\n  \t\t        (point.x / scale - this._b) / this._a,\r\n  \t\t        (point.y / scale - this._d) / this._c);\r\n  \t}\r\n  };\r\n\r\n  // factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n  // @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n  // Instantiates a Transformation object with the given coefficients.\r\n\r\n  // @alternative\r\n  // @factory L.transformation(coefficients: Array): Transformation\r\n  // Expects an coefficients array of the form\r\n  // `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\n  function toTransformation(a, b, c, d) {\r\n  \treturn new Transformation(a, b, c, d);\r\n  }\n\n  /*\r\n   * @namespace CRS\r\n   * @crs L.CRS.EPSG3857\r\n   *\r\n   * The most common CRS for online maps, used by almost all free and commercial\r\n   * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n   * Map's `crs` option.\r\n   */\r\n\r\n  var EPSG3857 = extend({}, Earth, {\r\n  \tcode: 'EPSG:3857',\r\n  \tprojection: SphericalMercator,\r\n\r\n  \ttransformation: (function () {\r\n  \t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n  \t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n  \t}())\r\n  });\r\n\r\n  var EPSG900913 = extend({}, EPSG3857, {\r\n  \tcode: 'EPSG:900913'\r\n  });\n\n  // @namespace SVG; @section\n  // There are several static functions which can be called without instantiating L.SVG:\n\n  // @function create(name: String): SVGElement\n  // Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n  // corresponding to the class name passed. For example, using 'line' will return\n  // an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\n  function svgCreate(name) {\n  \treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n  }\n\n  // @function pointsToPath(rings: Point[], closed: Boolean): String\n  // Generates a SVG path string for multiple rings, with each ring turning\n  // into \"M..L..L..\" instructions\n  function pointsToPath(rings, closed) {\n  \tvar str = '',\n  \ti, j, len, len2, points, p;\n\n  \tfor (i = 0, len = rings.length; i < len; i++) {\n  \t\tpoints = rings[i];\n\n  \t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n  \t\t\tp = points[j];\n  \t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n  \t\t}\n\n  \t\t// closes the ring for polygons; \"x\" is VML syntax\n  \t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n  \t}\n\n  \t// SVG complains about empty path strings\n  \treturn str || 'M0 0';\n  }\n\n  /*\r\n   * @namespace Browser\r\n   * @aka L.Browser\r\n   *\r\n   * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * if (L.Browser.ielt9) {\r\n   *   alert('Upgrade your browser, dude!');\r\n   * }\r\n   * ```\r\n   */\r\n\r\n  var style = document.documentElement.style;\r\n\r\n  // @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\n  var ie = 'ActiveXObject' in window;\r\n\r\n  // @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\n  var ielt9 = ie && !document.addEventListener;\r\n\r\n  // @property edge: Boolean; `true` for the Edge web browser.\r\n  var edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n  // @property webkit: Boolean;\r\n  // `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\n  var webkit = userAgentContains('webkit');\r\n\r\n  // @property android: Boolean\r\n  // **Deprecated.** `true` for any browser running on an Android platform.\r\n  var android = userAgentContains('android');\r\n\r\n  // @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\n  var android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n  /* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\n  var webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n  // @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\n  var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n  // @property opera: Boolean; `true` for the Opera browser\r\n  var opera = !!window.opera;\r\n\r\n  // @property chrome: Boolean; `true` for the Chrome browser.\r\n  var chrome = !edge && userAgentContains('chrome');\r\n\r\n  // @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\n  var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n  // @property safari: Boolean; `true` for the Safari browser.\r\n  var safari = !chrome && userAgentContains('safari');\r\n\r\n  var phantom = userAgentContains('phantom');\r\n\r\n  // @property opera12: Boolean\r\n  // `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\n  var opera12 = 'OTransition' in style;\r\n\r\n  // @property win: Boolean; `true` when the browser is running in a Windows platform\r\n  var win = navigator.platform.indexOf('Win') === 0;\r\n\r\n  // @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\n  var ie3d = ie && ('transition' in style);\r\n\r\n  // @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\n  var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n  // @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\n  var gecko3d = 'MozPerspective' in style;\r\n\r\n  // @property any3d: Boolean\r\n  // `true` for all browsers supporting CSS transforms.\r\n  var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n  // @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\n  var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n  // @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\n  var mobileWebkit = mobile && webkit;\r\n\r\n  // @property mobileWebkit3d: Boolean\r\n  // `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\n  var mobileWebkit3d = mobile && webkit3d;\r\n\r\n  // @property msPointer: Boolean\r\n  // `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\n  var msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n  // @property pointer: Boolean\r\n  // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\n  var pointer = !!(window.PointerEvent || msPointer);\r\n\r\n  // @property touchNative: Boolean\r\n  // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n  // **This does not necessarily mean** that the browser is running in a computer with\r\n  // a touchscreen, it only means that the browser is capable of understanding\r\n  // touch events.\r\n  var touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n  // @property touch: Boolean\r\n  // `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n  // Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\n  var touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n  // @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\n  var mobileOpera = mobile && opera;\r\n\r\n  // @property mobileGecko: Boolean\r\n  // `true` for gecko-based browsers running in a mobile device.\r\n  var mobileGecko = mobile && gecko;\r\n\r\n  // @property retina: Boolean\r\n  // `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\n  var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n  // @property passiveEvents: Boolean\r\n  // `true` for browsers that support passive events.\r\n  var passiveEvents = (function () {\r\n  \tvar supportsPassiveOption = false;\r\n  \ttry {\r\n  \t\tvar opts = Object.defineProperty({}, 'passive', {\r\n  \t\t\tget: function () { // eslint-disable-line getter-return\r\n  \t\t\t\tsupportsPassiveOption = true;\r\n  \t\t\t}\r\n  \t\t});\r\n  \t\twindow.addEventListener('testPassiveEventSupport', falseFn, opts);\r\n  \t\twindow.removeEventListener('testPassiveEventSupport', falseFn, opts);\r\n  \t} catch (e) {\r\n  \t\t// Errors can safely be ignored since this is only a browser support test.\r\n  \t}\r\n  \treturn supportsPassiveOption;\r\n  }());\r\n\r\n  // @property canvas: Boolean\r\n  // `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\n  var canvas$1 = (function () {\r\n  \treturn !!document.createElement('canvas').getContext;\r\n  }());\r\n\r\n  // @property svg: Boolean\r\n  // `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\n  var svg$1 = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\n  var inlineSvg = !!svg$1 && (function () {\r\n  \tvar div = document.createElement('div');\r\n  \tdiv.innerHTML = '<svg/>';\r\n  \treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n  })();\r\n\r\n  // @property vml: Boolean\r\n  // `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\n  var vml = !svg$1 && (function () {\r\n  \ttry {\r\n  \t\tvar div = document.createElement('div');\r\n  \t\tdiv.innerHTML = '<v:shape adj=\"1\"/>';\r\n\r\n  \t\tvar shape = div.firstChild;\r\n  \t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n  \t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n  \t} catch (e) {\r\n  \t\treturn false;\r\n  \t}\r\n  }());\r\n\r\n\r\n  // @property mac: Boolean; `true` when the browser is running in a Mac platform\r\n  var mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n  // @property mac: Boolean; `true` when the browser is running in a Linux platform\r\n  var linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\n  function userAgentContains(str) {\r\n  \treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n  }\r\n\r\n\r\n  var Browser = {\r\n  \tie: ie,\r\n  \tielt9: ielt9,\r\n  \tedge: edge,\r\n  \twebkit: webkit,\r\n  \tandroid: android,\r\n  \tandroid23: android23,\r\n  \tandroidStock: androidStock,\r\n  \topera: opera,\r\n  \tchrome: chrome,\r\n  \tgecko: gecko,\r\n  \tsafari: safari,\r\n  \tphantom: phantom,\r\n  \topera12: opera12,\r\n  \twin: win,\r\n  \tie3d: ie3d,\r\n  \twebkit3d: webkit3d,\r\n  \tgecko3d: gecko3d,\r\n  \tany3d: any3d,\r\n  \tmobile: mobile,\r\n  \tmobileWebkit: mobileWebkit,\r\n  \tmobileWebkit3d: mobileWebkit3d,\r\n  \tmsPointer: msPointer,\r\n  \tpointer: pointer,\r\n  \ttouch: touch,\r\n  \ttouchNative: touchNative,\r\n  \tmobileOpera: mobileOpera,\r\n  \tmobileGecko: mobileGecko,\r\n  \tretina: retina,\r\n  \tpassiveEvents: passiveEvents,\r\n  \tcanvas: canvas$1,\r\n  \tsvg: svg$1,\r\n  \tvml: vml,\r\n  \tinlineSvg: inlineSvg,\r\n  \tmac: mac,\r\n  \tlinux: linux\r\n  };\n\n  /*\n   * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n   */\n\n  var POINTER_DOWN =   Browser.msPointer ? 'MSPointerDown'   : 'pointerdown';\n  var POINTER_MOVE =   Browser.msPointer ? 'MSPointerMove'   : 'pointermove';\n  var POINTER_UP =     Browser.msPointer ? 'MSPointerUp'     : 'pointerup';\n  var POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\n  var pEvent = {\n  \ttouchstart  : POINTER_DOWN,\n  \ttouchmove   : POINTER_MOVE,\n  \ttouchend    : POINTER_UP,\n  \ttouchcancel : POINTER_CANCEL\n  };\n  var handle = {\n  \ttouchstart  : _onPointerStart,\n  \ttouchmove   : _handlePointer,\n  \ttouchend    : _handlePointer,\n  \ttouchcancel : _handlePointer\n  };\n  var _pointers = {};\n  var _pointerDocListener = false;\n\n  // Provides a touch events wrapper for (ms)pointer events.\n  // ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\n  function addPointerListener(obj, type, handler) {\n  \tif (type === 'touchstart') {\n  \t\t_addPointerDocListener();\n  \t}\n  \tif (!handle[type]) {\n  \t\tconsole.warn('wrong event specified:', type);\n  \t\treturn L.Util.falseFn;\n  \t}\n  \thandler = handle[type].bind(this, handler);\n  \tobj.addEventListener(pEvent[type], handler, false);\n  \treturn handler;\n  }\n\n  function removePointerListener(obj, type, handler) {\n  \tif (!pEvent[type]) {\n  \t\tconsole.warn('wrong event specified:', type);\n  \t\treturn;\n  \t}\n  \tobj.removeEventListener(pEvent[type], handler, false);\n  }\n\n  function _globalPointerDown(e) {\n  \t_pointers[e.pointerId] = e;\n  }\n\n  function _globalPointerMove(e) {\n  \tif (_pointers[e.pointerId]) {\n  \t\t_pointers[e.pointerId] = e;\n  \t}\n  }\n\n  function _globalPointerUp(e) {\n  \tdelete _pointers[e.pointerId];\n  }\n\n  function _addPointerDocListener() {\n  \t// need to keep track of what pointers and how many are active to provide e.touches emulation\n  \tif (!_pointerDocListener) {\n  \t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n  \t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n  \t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n  \t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n  \t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n  \t\t_pointerDocListener = true;\n  \t}\n  }\n\n  function _handlePointer(handler, e) {\n  \tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n  \te.touches = [];\n  \tfor (var i in _pointers) {\n  \t\te.touches.push(_pointers[i]);\n  \t}\n  \te.changedTouches = [e];\n\n  \thandler(e);\n  }\n\n  function _onPointerStart(handler, e) {\n  \t// IE10 specific: MsTouch needs preventDefault. See #2000\n  \tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n  \t\tpreventDefault(e);\n  \t}\n  \t_handlePointer(handler, e);\n  }\n\n  /*\r\n   * Extends the event handling code with double tap support for mobile browsers.\r\n   *\r\n   * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n   * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n   */\r\n\r\n  function makeDblclick(event) {\r\n  \t// in modern browsers `type` cannot be just overridden:\r\n  \t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n  \tvar newEvent = {},\r\n  \t    prop, i;\r\n  \tfor (i in event) {\r\n  \t\tprop = event[i];\r\n  \t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n  \t}\r\n  \tevent = newEvent;\r\n  \tnewEvent.type = 'dblclick';\r\n  \tnewEvent.detail = 2;\r\n  \tnewEvent.isTrusted = false;\r\n  \tnewEvent._simulated = true; // for debug purposes\r\n  \treturn newEvent;\r\n  }\r\n\r\n  var delay = 200;\r\n  function addDoubleTapListener(obj, handler) {\r\n  \t// Most browsers handle double tap natively\r\n  \tobj.addEventListener('dblclick', handler);\r\n\r\n  \t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n  \t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n  \t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n  \tvar last = 0,\r\n  \t    detail;\r\n  \tfunction simDblclick(e) {\r\n  \t\tif (e.detail !== 1) {\r\n  \t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tif (e.pointerType === 'mouse' ||\r\n  \t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\t// When clicking on an <input>, the browser generates a click on its\r\n  \t\t// <label> (and vice versa) triggering two clicks in quick succession.\r\n  \t\t// This ignores clicks on elements which are a label with a 'for'\r\n  \t\t// attribute (or children of such a label), but not children of\r\n  \t\t// a <input>.\r\n  \t\tvar path = getPropagationPath(e);\r\n  \t\tif (path.some(function (el) {\r\n  \t\t\treturn el instanceof HTMLLabelElement && el.attributes.for;\r\n  \t\t}) &&\r\n  \t\t\t!path.some(function (el) {\r\n  \t\t\t\treturn (\r\n  \t\t\t\t\tel instanceof HTMLInputElement ||\r\n  \t\t\t\t\tel instanceof HTMLSelectElement\r\n  \t\t\t\t);\r\n  \t\t\t})\r\n  \t\t) {\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tvar now = Date.now();\r\n  \t\tif (now - last <= delay) {\r\n  \t\t\tdetail++;\r\n  \t\t\tif (detail === 2) {\r\n  \t\t\t\thandler(makeDblclick(e));\r\n  \t\t\t}\r\n  \t\t} else {\r\n  \t\t\tdetail = 1;\r\n  \t\t}\r\n  \t\tlast = now;\r\n  \t}\r\n\r\n  \tobj.addEventListener('click', simDblclick);\r\n\r\n  \treturn {\r\n  \t\tdblclick: handler,\r\n  \t\tsimDblclick: simDblclick\r\n  \t};\r\n  }\r\n\r\n  function removeDoubleTapListener(obj, handlers) {\r\n  \tobj.removeEventListener('dblclick', handlers.dblclick);\r\n  \tobj.removeEventListener('click', handlers.simDblclick);\r\n  }\n\n  /*\r\n   * @namespace DomUtil\r\n   *\r\n   * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n   * tree, used by Leaflet internally.\r\n   *\r\n   * Most functions expecting or returning a `HTMLElement` also work for\r\n   * SVG elements. The only difference is that classes refer to CSS classes\r\n   * in HTML and SVG classes in SVG.\r\n   */\r\n\r\n\r\n  // @property TRANSFORM: String\r\n  // Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\n  var TRANSFORM = testProp(\r\n  \t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n  // webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n  // the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n  // @property TRANSITION: String\r\n  // Vendor-prefixed transition style name.\r\n  var TRANSITION = testProp(\r\n  \t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n  // @property TRANSITION_END: String\r\n  // Vendor-prefixed transitionend event name.\r\n  var TRANSITION_END =\r\n  \tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n  // @function get(id: String|HTMLElement): HTMLElement\r\n  // Returns an element given its DOM id, or returns the element itself\r\n  // if it was passed directly.\r\n  function get(id) {\r\n  \treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n  }\r\n\r\n  // @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n  // Returns the value for a certain style attribute on an element,\r\n  // including computed values or values set through CSS.\r\n  function getStyle(el, style) {\r\n  \tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n  \tif ((!value || value === 'auto') && document.defaultView) {\r\n  \t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n  \t\tvalue = css ? css[style] : null;\r\n  \t}\r\n  \treturn value === 'auto' ? null : value;\r\n  }\r\n\r\n  // @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n  // Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\n  function create$1(tagName, className, container) {\r\n  \tvar el = document.createElement(tagName);\r\n  \tel.className = className || '';\r\n\r\n  \tif (container) {\r\n  \t\tcontainer.appendChild(el);\r\n  \t}\r\n  \treturn el;\r\n  }\r\n\r\n  // @function remove(el: HTMLElement)\r\n  // Removes `el` from its parent element\r\n  function remove(el) {\r\n  \tvar parent = el.parentNode;\r\n  \tif (parent) {\r\n  \t\tparent.removeChild(el);\r\n  \t}\r\n  }\r\n\r\n  // @function empty(el: HTMLElement)\r\n  // Removes all of `el`'s children elements from `el`\r\n  function empty(el) {\r\n  \twhile (el.firstChild) {\r\n  \t\tel.removeChild(el.firstChild);\r\n  \t}\r\n  }\r\n\r\n  // @function toFront(el: HTMLElement)\r\n  // Makes `el` the last child of its parent, so it renders in front of the other children.\r\n  function toFront(el) {\r\n  \tvar parent = el.parentNode;\r\n  \tif (parent && parent.lastChild !== el) {\r\n  \t\tparent.appendChild(el);\r\n  \t}\r\n  }\r\n\r\n  // @function toBack(el: HTMLElement)\r\n  // Makes `el` the first child of its parent, so it renders behind the other children.\r\n  function toBack(el) {\r\n  \tvar parent = el.parentNode;\r\n  \tif (parent && parent.firstChild !== el) {\r\n  \t\tparent.insertBefore(el, parent.firstChild);\r\n  \t}\r\n  }\r\n\r\n  // @function hasClass(el: HTMLElement, name: String): Boolean\r\n  // Returns `true` if the element's class attribute contains `name`.\r\n  function hasClass(el, name) {\r\n  \tif (el.classList !== undefined) {\r\n  \t\treturn el.classList.contains(name);\r\n  \t}\r\n  \tvar className = getClass(el);\r\n  \treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n  }\r\n\r\n  // @function addClass(el: HTMLElement, name: String)\r\n  // Adds `name` to the element's class attribute.\r\n  function addClass(el, name) {\r\n  \tif (el.classList !== undefined) {\r\n  \t\tvar classes = splitWords(name);\r\n  \t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n  \t\t\tel.classList.add(classes[i]);\r\n  \t\t}\r\n  \t} else if (!hasClass(el, name)) {\r\n  \t\tvar className = getClass(el);\r\n  \t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n  \t}\r\n  }\r\n\r\n  // @function removeClass(el: HTMLElement, name: String)\r\n  // Removes `name` from the element's class attribute.\r\n  function removeClass(el, name) {\r\n  \tif (el.classList !== undefined) {\r\n  \t\tel.classList.remove(name);\r\n  \t} else {\r\n  \t\tsetClass(el, trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n  \t}\r\n  }\r\n\r\n  // @function setClass(el: HTMLElement, name: String)\r\n  // Sets the element's class.\r\n  function setClass(el, name) {\r\n  \tif (el.className.baseVal === undefined) {\r\n  \t\tel.className = name;\r\n  \t} else {\r\n  \t\t// in case of SVG element\r\n  \t\tel.className.baseVal = name;\r\n  \t}\r\n  }\r\n\r\n  // @function getClass(el: HTMLElement): String\r\n  // Returns the element's class.\r\n  function getClass(el) {\r\n  \t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n  \t// (Required for linked SVG elements in IE11.)\r\n  \tif (el.correspondingElement) {\r\n  \t\tel = el.correspondingElement;\r\n  \t}\r\n  \treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n  }\r\n\r\n  // @function setOpacity(el: HTMLElement, opacity: Number)\r\n  // Set the opacity of an element (including old IE support).\r\n  // `opacity` must be a number from `0` to `1`.\r\n  function setOpacity(el, value) {\r\n  \tif ('opacity' in el.style) {\r\n  \t\tel.style.opacity = value;\r\n  \t} else if ('filter' in el.style) {\r\n  \t\t_setOpacityIE(el, value);\r\n  \t}\r\n  }\r\n\r\n  function _setOpacityIE(el, value) {\r\n  \tvar filter = false,\r\n  \t    filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n  \t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n  \ttry {\r\n  \t\tfilter = el.filters.item(filterName);\r\n  \t} catch (e) {\r\n  \t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n  \t\t// it isn't needed and breaks transparent pngs.\r\n  \t\tif (value === 1) { return; }\r\n  \t}\r\n\r\n  \tvalue = Math.round(value * 100);\r\n\r\n  \tif (filter) {\r\n  \t\tfilter.Enabled = (value !== 100);\r\n  \t\tfilter.Opacity = value;\r\n  \t} else {\r\n  \t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n  \t}\r\n  }\r\n\r\n  // @function testProp(props: String[]): String|false\r\n  // Goes through the array of style names and returns the first name\r\n  // that is a valid style name for an element. If no such name is found,\r\n  // it returns false. Useful for vendor-prefixed styles like `transform`.\r\n  function testProp(props) {\r\n  \tvar style = document.documentElement.style;\r\n\r\n  \tfor (var i = 0; i < props.length; i++) {\r\n  \t\tif (props[i] in style) {\r\n  \t\t\treturn props[i];\r\n  \t\t}\r\n  \t}\r\n  \treturn false;\r\n  }\r\n\r\n  // @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n  // Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n  // and optionally scaled by `scale`. Does not have an effect if the\r\n  // browser doesn't support 3D CSS transforms.\r\n  function setTransform(el, offset, scale) {\r\n  \tvar pos = offset || new Point(0, 0);\r\n\r\n  \tel.style[TRANSFORM] =\r\n  \t\t(Browser.ie3d ?\r\n  \t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n  \t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n  \t\t(scale ? ' scale(' + scale + ')' : '');\r\n  }\r\n\r\n  // @function setPosition(el: HTMLElement, position: Point)\r\n  // Sets the position of `el` to coordinates specified by `position`,\r\n  // using CSS translate or top/left positioning depending on the browser\r\n  // (used by Leaflet internally to position its layers).\r\n  function setPosition(el, point) {\r\n\r\n  \t/*eslint-disable */\r\n  \tel._leaflet_pos = point;\r\n  \t/* eslint-enable */\r\n\r\n  \tif (Browser.any3d) {\r\n  \t\tsetTransform(el, point);\r\n  \t} else {\r\n  \t\tel.style.left = point.x + 'px';\r\n  \t\tel.style.top = point.y + 'px';\r\n  \t}\r\n  }\r\n\r\n  // @function getPosition(el: HTMLElement): Point\r\n  // Returns the coordinates of an element previously positioned with setPosition.\r\n  function getPosition(el) {\r\n  \t// this method is only used for elements previously positioned using setPosition,\r\n  \t// so it's safe to cache the position for performance\r\n\r\n  \treturn el._leaflet_pos || new Point(0, 0);\r\n  }\r\n\r\n  // @function disableTextSelection()\r\n  // Prevents the user from generating `selectstart` DOM events, usually generated\r\n  // when the user drags the mouse through a page with text. Used internally\r\n  // by Leaflet to override the behaviour of any click-and-drag interaction on\r\n  // the map. Affects drag interactions on the whole document.\r\n\r\n  // @function enableTextSelection()\r\n  // Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\n  var disableTextSelection;\r\n  var enableTextSelection;\r\n  var _userSelect;\r\n  if ('onselectstart' in document) {\r\n  \tdisableTextSelection = function () {\r\n  \t\ton(window, 'selectstart', preventDefault);\r\n  \t};\r\n  \tenableTextSelection = function () {\r\n  \t\toff(window, 'selectstart', preventDefault);\r\n  \t};\r\n  } else {\r\n  \tvar userSelectProperty = testProp(\r\n  \t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n  \tdisableTextSelection = function () {\r\n  \t\tif (userSelectProperty) {\r\n  \t\t\tvar style = document.documentElement.style;\r\n  \t\t\t_userSelect = style[userSelectProperty];\r\n  \t\t\tstyle[userSelectProperty] = 'none';\r\n  \t\t}\r\n  \t};\r\n  \tenableTextSelection = function () {\r\n  \t\tif (userSelectProperty) {\r\n  \t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n  \t\t\t_userSelect = undefined;\r\n  \t\t}\r\n  \t};\r\n  }\r\n\r\n  // @function disableImageDrag()\r\n  // As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n  // for `dragstart` DOM events, usually generated when the user drags an image.\r\n  function disableImageDrag() {\r\n  \ton(window, 'dragstart', preventDefault);\r\n  }\r\n\r\n  // @function enableImageDrag()\r\n  // Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\n  function enableImageDrag() {\r\n  \toff(window, 'dragstart', preventDefault);\r\n  }\r\n\r\n  var _outlineElement, _outlineStyle;\r\n  // @function preventOutline(el: HTMLElement)\r\n  // Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n  // of the element `el` invisible. Used internally by Leaflet to prevent\r\n  // focusable elements from displaying an outline when the user performs a\r\n  // drag interaction on them.\r\n  function preventOutline(element) {\r\n  \twhile (element.tabIndex === -1) {\r\n  \t\telement = element.parentNode;\r\n  \t}\r\n  \tif (!element.style) { return; }\r\n  \trestoreOutline();\r\n  \t_outlineElement = element;\r\n  \t_outlineStyle = element.style.outline;\r\n  \telement.style.outline = 'none';\r\n  \ton(window, 'keydown', restoreOutline);\r\n  }\r\n\r\n  // @function restoreOutline()\r\n  // Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\n  function restoreOutline() {\r\n  \tif (!_outlineElement) { return; }\r\n  \t_outlineElement.style.outline = _outlineStyle;\r\n  \t_outlineElement = undefined;\r\n  \t_outlineStyle = undefined;\r\n  \toff(window, 'keydown', restoreOutline);\r\n  }\r\n\r\n  // @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n  // Finds the closest parent node which size (width and height) is not null.\r\n  function getSizedParentNode(element) {\r\n  \tdo {\r\n  \t\telement = element.parentNode;\r\n  \t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n  \treturn element;\r\n  }\r\n\r\n  // @function getScale(el: HTMLElement): Object\r\n  // Computes the CSS scale currently applied on the element.\r\n  // Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n  // and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\n  function getScale(element) {\r\n  \tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n  \treturn {\r\n  \t\tx: rect.width / element.offsetWidth || 1,\r\n  \t\ty: rect.height / element.offsetHeight || 1,\r\n  \t\tboundingClientRect: rect\r\n  \t};\r\n  }\n\n  var DomUtil = {\n    __proto__: null,\n    TRANSFORM: TRANSFORM,\n    TRANSITION: TRANSITION,\n    TRANSITION_END: TRANSITION_END,\n    get: get,\n    getStyle: getStyle,\n    create: create$1,\n    remove: remove,\n    empty: empty,\n    toFront: toFront,\n    toBack: toBack,\n    hasClass: hasClass,\n    addClass: addClass,\n    removeClass: removeClass,\n    setClass: setClass,\n    getClass: getClass,\n    setOpacity: setOpacity,\n    testProp: testProp,\n    setTransform: setTransform,\n    setPosition: setPosition,\n    getPosition: getPosition,\n    get disableTextSelection () { return disableTextSelection; },\n    get enableTextSelection () { return enableTextSelection; },\n    disableImageDrag: disableImageDrag,\n    enableImageDrag: enableImageDrag,\n    preventOutline: preventOutline,\n    restoreOutline: restoreOutline,\n    getSizedParentNode: getSizedParentNode,\n    getScale: getScale\n  };\n\n  /*\r\n   * @namespace DomEvent\r\n   * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n   */\r\n\r\n  // Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n  // @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n  // Adds a listener function (`fn`) to a particular DOM event type of the\r\n  // element `el`. You can optionally specify the context of the listener\r\n  // (object the `this` keyword will point to). You can also pass several\r\n  // space-separated types (e.g. `'click dblclick'`).\r\n\r\n  // @alternative\r\n  // @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n  // Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n  function on(obj, types, fn, context) {\r\n\r\n  \tif (types && typeof types === 'object') {\r\n  \t\tfor (var type in types) {\r\n  \t\t\taddOne(obj, type, types[type], fn);\r\n  \t\t}\r\n  \t} else {\r\n  \t\ttypes = splitWords(types);\r\n\r\n  \t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n  \t\t\taddOne(obj, types[i], fn, context);\r\n  \t\t}\r\n  \t}\r\n\r\n  \treturn this;\r\n  }\r\n\r\n  var eventsKey = '_leaflet_events';\r\n\r\n  // @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n  // Removes a previously added listener function.\r\n  // Note that if you passed a custom context to on, you must pass the same\r\n  // context to `off` in order to remove the listener.\r\n\r\n  // @alternative\r\n  // @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n  // Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\r\n  // @alternative\r\n  // @function off(el: HTMLElement, types: String): this\r\n  // Removes all previously added listeners of given types.\r\n\r\n  // @alternative\r\n  // @function off(el: HTMLElement): this\r\n  // Removes all previously added listeners from given HTMLElement\r\n  function off(obj, types, fn, context) {\r\n\r\n  \tif (arguments.length === 1) {\r\n  \t\tbatchRemove(obj);\r\n  \t\tdelete obj[eventsKey];\r\n\r\n  \t} else if (types && typeof types === 'object') {\r\n  \t\tfor (var type in types) {\r\n  \t\t\tremoveOne(obj, type, types[type], fn);\r\n  \t\t}\r\n\r\n  \t} else {\r\n  \t\ttypes = splitWords(types);\r\n\r\n  \t\tif (arguments.length === 2) {\r\n  \t\t\tbatchRemove(obj, function (type) {\r\n  \t\t\t\treturn indexOf(types, type) !== -1;\r\n  \t\t\t});\r\n  \t\t} else {\r\n  \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n  \t\t\t\tremoveOne(obj, types[i], fn, context);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t}\r\n\r\n  \treturn this;\r\n  }\r\n\r\n  function batchRemove(obj, filterFn) {\r\n  \tfor (var id in obj[eventsKey]) {\r\n  \t\tvar type = id.split(/\\d/)[0];\r\n  \t\tif (!filterFn || filterFn(type)) {\r\n  \t\t\tremoveOne(obj, type, null, null, id);\r\n  \t\t}\r\n  \t}\r\n  }\r\n\r\n  var mouseSubst = {\r\n  \tmouseenter: 'mouseover',\r\n  \tmouseleave: 'mouseout',\r\n  \twheel: !('onwheel' in window) && 'mousewheel'\r\n  };\r\n\r\n  function addOne(obj, type, fn, context) {\r\n  \tvar id = type + stamp(fn) + (context ? '_' + stamp(context) : '');\r\n\r\n  \tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n  \tvar handler = function (e) {\r\n  \t\treturn fn.call(context || obj, e || window.event);\r\n  \t};\r\n\r\n  \tvar originalHandler = handler;\r\n\r\n  \tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n  \t\t// Needs DomEvent.Pointer.js\r\n  \t\thandler = addPointerListener(obj, type, handler);\r\n\r\n  \t} else if (Browser.touch && (type === 'dblclick')) {\r\n  \t\thandler = addDoubleTapListener(obj, handler);\r\n\r\n  \t} else if ('addEventListener' in obj) {\r\n\r\n  \t\tif (type === 'touchstart' || type === 'touchmove' || type === 'wheel' ||  type === 'mousewheel') {\r\n  \t\t\tobj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n  \t\t} else if (type === 'mouseenter' || type === 'mouseleave') {\r\n  \t\t\thandler = function (e) {\r\n  \t\t\t\te = e || window.event;\r\n  \t\t\t\tif (isExternalTarget(obj, e)) {\r\n  \t\t\t\t\toriginalHandler(e);\r\n  \t\t\t\t}\r\n  \t\t\t};\r\n  \t\t\tobj.addEventListener(mouseSubst[type], handler, false);\r\n\r\n  \t\t} else {\r\n  \t\t\tobj.addEventListener(type, originalHandler, false);\r\n  \t\t}\r\n\r\n  \t} else {\r\n  \t\tobj.attachEvent('on' + type, handler);\r\n  \t}\r\n\r\n  \tobj[eventsKey] = obj[eventsKey] || {};\r\n  \tobj[eventsKey][id] = handler;\r\n  }\r\n\r\n  function removeOne(obj, type, fn, context, id) {\r\n  \tid = id || type + stamp(fn) + (context ? '_' + stamp(context) : '');\r\n  \tvar handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n  \tif (!handler) { return this; }\r\n\r\n  \tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n  \t\tremovePointerListener(obj, type, handler);\r\n\r\n  \t} else if (Browser.touch && (type === 'dblclick')) {\r\n  \t\tremoveDoubleTapListener(obj, handler);\r\n\r\n  \t} else if ('removeEventListener' in obj) {\r\n\r\n  \t\tobj.removeEventListener(mouseSubst[type] || type, handler, false);\r\n\r\n  \t} else {\r\n  \t\tobj.detachEvent('on' + type, handler);\r\n  \t}\r\n\r\n  \tobj[eventsKey][id] = null;\r\n  }\r\n\r\n  // @function stopPropagation(ev: DOMEvent): this\r\n  // Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n  // ```js\r\n  // L.DomEvent.on(div, 'click', function (ev) {\r\n  // \tL.DomEvent.stopPropagation(ev);\r\n  // });\r\n  // ```\r\n  function stopPropagation(e) {\r\n\r\n  \tif (e.stopPropagation) {\r\n  \t\te.stopPropagation();\r\n  \t} else if (e.originalEvent) {  // In case of Leaflet event.\r\n  \t\te.originalEvent._stopped = true;\r\n  \t} else {\r\n  \t\te.cancelBubble = true;\r\n  \t}\r\n\r\n  \treturn this;\r\n  }\r\n\r\n  // @function disableScrollPropagation(el: HTMLElement): this\r\n  // Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\r\n  function disableScrollPropagation(el) {\r\n  \taddOne(el, 'wheel', stopPropagation);\r\n  \treturn this;\r\n  }\r\n\r\n  // @function disableClickPropagation(el: HTMLElement): this\r\n  // Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,\r\n  // `'mousedown'` and `'touchstart'` events (plus browser variants).\r\n  function disableClickPropagation(el) {\r\n  \ton(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);\r\n  \tel['_leaflet_disable_click'] = true;\r\n  \treturn this;\r\n  }\r\n\r\n  // @function preventDefault(ev: DOMEvent): this\r\n  // Prevents the default action of the DOM Event `ev` from happening (such as\r\n  // following a link in the href of the a element, or doing a POST request\r\n  // with page reload when a `<form>` is submitted).\r\n  // Use it inside listener functions.\r\n  function preventDefault(e) {\r\n  \tif (e.preventDefault) {\r\n  \t\te.preventDefault();\r\n  \t} else {\r\n  \t\te.returnValue = false;\r\n  \t}\r\n  \treturn this;\r\n  }\r\n\r\n  // @function stop(ev: DOMEvent): this\r\n  // Does `stopPropagation` and `preventDefault` at the same time.\r\n  function stop(e) {\r\n  \tpreventDefault(e);\r\n  \tstopPropagation(e);\r\n  \treturn this;\r\n  }\r\n\r\n  // @function getPropagationPath(ev: DOMEvent): Array\r\n  // Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).\r\n  // Returns an array containing the `HTMLElement`s that the given DOM event\r\n  // should propagate to (if not stopped).\r\n  function getPropagationPath(ev) {\r\n  \tif (ev.composedPath) {\r\n  \t\treturn ev.composedPath();\r\n  \t}\r\n\r\n  \tvar path = [];\r\n  \tvar el = ev.target;\r\n\r\n  \twhile (el) {\r\n  \t\tpath.push(el);\r\n  \t\tel = el.parentNode;\r\n  \t}\r\n  \treturn path;\r\n  }\r\n\r\n\r\n  // @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n  // Gets normalized mouse position from a DOM event relative to the\r\n  // `container` (border excluded) or to the whole page if not specified.\r\n  function getMousePosition(e, container) {\r\n  \tif (!container) {\r\n  \t\treturn new Point(e.clientX, e.clientY);\r\n  \t}\r\n\r\n  \tvar scale = getScale(container),\r\n  \t    offset = scale.boundingClientRect; // left and top  values are in page scale (like the event clientX/Y)\r\n\r\n  \treturn new Point(\r\n  \t\t// offset.left/top values are in page scale (like clientX/Y),\r\n  \t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n  \t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n  \t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n  \t);\r\n  }\r\n\r\n\r\n  //  except , Safari and\r\n  // We need double the scroll pixels (see #7403 and #4538) for all Browsers\r\n  // except OSX (Mac) -> 3x, Chrome running on Linux 1x\r\n\r\n  var wheelPxFactor =\r\n  \t(Browser.linux && Browser.chrome) ? window.devicePixelRatio :\r\n  \tBrowser.mac ? window.devicePixelRatio * 3 :\r\n  \twindow.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;\r\n  // @function getWheelDelta(ev: DOMEvent): Number\r\n  // Gets normalized wheel delta from a wheel DOM event, in vertical\r\n  // pixels scrolled (negative if scrolling down).\r\n  // Events from pointing devices without precise scrolling are mapped to\r\n  // a best guess of 60 pixels.\r\n  function getWheelDelta(e) {\r\n  \treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n  \t       (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n  \t       (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n  \t       (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n  \t       (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n  \t       e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n  \t       (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n  \t       e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n  \t       0;\r\n  }\r\n\r\n  // check if element really left/entered the event target (for mouseenter/mouseleave)\r\n  function isExternalTarget(el, e) {\r\n\r\n  \tvar related = e.relatedTarget;\r\n\r\n  \tif (!related) { return true; }\r\n\r\n  \ttry {\r\n  \t\twhile (related && (related !== el)) {\r\n  \t\t\trelated = related.parentNode;\r\n  \t\t}\r\n  \t} catch (err) {\r\n  \t\treturn false;\r\n  \t}\r\n  \treturn (related !== el);\r\n  }\n\n  var DomEvent = {\n    __proto__: null,\n    on: on,\n    off: off,\n    stopPropagation: stopPropagation,\n    disableScrollPropagation: disableScrollPropagation,\n    disableClickPropagation: disableClickPropagation,\n    preventDefault: preventDefault,\n    stop: stop,\n    getPropagationPath: getPropagationPath,\n    getMousePosition: getMousePosition,\n    getWheelDelta: getWheelDelta,\n    isExternalTarget: isExternalTarget,\n    addListener: on,\n    removeListener: off\n  };\n\n  /*\n   * @class PosAnimation\n   * @aka L.PosAnimation\n   * @inherits Evented\n   * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n   *\n   * @example\n   * ```js\n   * var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);\n   *\n   * myPositionMarker.on(\"click\", function() {\n   * \tvar pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());\n   * \tpos.y -= 25;\n   * \tvar fx = new L.PosAnimation();\n   *\n   * \tfx.once('end',function() {\n   * \t\tpos.y += 25;\n   * \t\tfx.run(myPositionMarker._icon, pos, 0.8);\n   * \t});\n   *\n   * \tfx.run(myPositionMarker._icon, pos, 0.3);\n   * });\n   *\n   * ```\n   *\n   * @constructor L.PosAnimation()\n   * Creates a `PosAnimation` object.\n   *\n   */\n\n  var PosAnimation = Evented.extend({\n\n  \t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n  \t// Run an animation of a given element to a new position, optionally setting\n  \t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n  \t// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),\n  \t// `0.5` by default).\n  \trun: function (el, newPos, duration, easeLinearity) {\n  \t\tthis.stop();\n\n  \t\tthis._el = el;\n  \t\tthis._inProgress = true;\n  \t\tthis._duration = duration || 0.25;\n  \t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n  \t\tthis._startPos = getPosition(el);\n  \t\tthis._offset = newPos.subtract(this._startPos);\n  \t\tthis._startTime = +new Date();\n\n  \t\t// @event start: Event\n  \t\t// Fired when the animation starts\n  \t\tthis.fire('start');\n\n  \t\tthis._animate();\n  \t},\n\n  \t// @method stop()\n  \t// Stops the animation (if currently running).\n  \tstop: function () {\n  \t\tif (!this._inProgress) { return; }\n\n  \t\tthis._step(true);\n  \t\tthis._complete();\n  \t},\n\n  \t_animate: function () {\n  \t\t// animation loop\n  \t\tthis._animId = requestAnimFrame(this._animate, this);\n  \t\tthis._step();\n  \t},\n\n  \t_step: function (round) {\n  \t\tvar elapsed = (+new Date()) - this._startTime,\n  \t\t    duration = this._duration * 1000;\n\n  \t\tif (elapsed < duration) {\n  \t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n  \t\t} else {\n  \t\t\tthis._runFrame(1);\n  \t\t\tthis._complete();\n  \t\t}\n  \t},\n\n  \t_runFrame: function (progress, round) {\n  \t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n  \t\tif (round) {\n  \t\t\tpos._round();\n  \t\t}\n  \t\tsetPosition(this._el, pos);\n\n  \t\t// @event step: Event\n  \t\t// Fired continuously during the animation.\n  \t\tthis.fire('step');\n  \t},\n\n  \t_complete: function () {\n  \t\tcancelAnimFrame(this._animId);\n\n  \t\tthis._inProgress = false;\n  \t\t// @event end: Event\n  \t\t// Fired when the animation ends.\n  \t\tthis.fire('end');\n  \t},\n\n  \t_easeOut: function (t) {\n  \t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n  \t}\n  });\n\n  /*\r\n   * @class Map\r\n   * @aka L.Map\r\n   * @inherits Evented\r\n   *\r\n   * The central class of the API — it is used to create a map on a page and manipulate it.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * // initialize the map on the \"map\" div with a given center and zoom\r\n   * var map = L.map('map', {\r\n   * \tcenter: [51.505, -0.09],\r\n   * \tzoom: 13\r\n   * });\r\n   * ```\r\n   *\r\n   */\r\n\r\n  var Map = Evented.extend({\r\n\r\n  \toptions: {\r\n  \t\t// @section Map State Options\r\n  \t\t// @option crs: CRS = L.CRS.EPSG3857\r\n  \t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n  \t\t// sure what it means.\r\n  \t\tcrs: EPSG3857,\r\n\r\n  \t\t// @option center: LatLng = undefined\r\n  \t\t// Initial geographic center of the map\r\n  \t\tcenter: undefined,\r\n\r\n  \t\t// @option zoom: Number = undefined\r\n  \t\t// Initial map zoom level\r\n  \t\tzoom: undefined,\r\n\r\n  \t\t// @option minZoom: Number = *\r\n  \t\t// Minimum zoom level of the map.\r\n  \t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n  \t\t// the lowest of their `minZoom` options will be used instead.\r\n  \t\tminZoom: undefined,\r\n\r\n  \t\t// @option maxZoom: Number = *\r\n  \t\t// Maximum zoom level of the map.\r\n  \t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n  \t\t// the highest of their `maxZoom` options will be used instead.\r\n  \t\tmaxZoom: undefined,\r\n\r\n  \t\t// @option layers: Layer[] = []\r\n  \t\t// Array of layers that will be added to the map initially\r\n  \t\tlayers: [],\r\n\r\n  \t\t// @option maxBounds: LatLngBounds = null\r\n  \t\t// When this option is set, the map restricts the view to the given\r\n  \t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n  \t\t// outside the view. To set the restriction dynamically, use\r\n  \t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n  \t\tmaxBounds: undefined,\r\n\r\n  \t\t// @option renderer: Renderer = *\r\n  \t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n  \t\t// or `L.Canvas` by default depending on browser support.\r\n  \t\trenderer: undefined,\r\n\r\n\r\n  \t\t// @section Animation Options\r\n  \t\t// @option zoomAnimation: Boolean = true\r\n  \t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n  \t\t// in all browsers that support CSS3 Transitions except Android.\r\n  \t\tzoomAnimation: true,\r\n\r\n  \t\t// @option zoomAnimationThreshold: Number = 4\r\n  \t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n  \t\tzoomAnimationThreshold: 4,\r\n\r\n  \t\t// @option fadeAnimation: Boolean = true\r\n  \t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n  \t\t// in all browsers that support CSS3 Transitions except Android.\r\n  \t\tfadeAnimation: true,\r\n\r\n  \t\t// @option markerZoomAnimation: Boolean = true\r\n  \t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n  \t\t// they will disappear for the length of the animation. By default it's\r\n  \t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n  \t\tmarkerZoomAnimation: true,\r\n\r\n  \t\t// @option transform3DLimit: Number = 2^23\r\n  \t\t// Defines the maximum size of a CSS translation transform. The default\r\n  \t\t// value should not be changed unless a web browser positions layers in\r\n  \t\t// the wrong place after doing a large `panBy`.\r\n  \t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n  \t\t// @section Interaction Options\r\n  \t\t// @option zoomSnap: Number = 1\r\n  \t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n  \t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n  \t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n  \t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n  \t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n  \t\tzoomSnap: 1,\r\n\r\n  \t\t// @option zoomDelta: Number = 1\r\n  \t\t// Controls how much the map's zoom level will change after a\r\n  \t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n  \t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n  \t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n  \t\tzoomDelta: 1,\r\n\r\n  \t\t// @option trackResize: Boolean = true\r\n  \t\t// Whether the map automatically handles browser window resize to update itself.\r\n  \t\ttrackResize: true\r\n  \t},\r\n\r\n  \tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n  \t\toptions = setOptions(this, options);\r\n\r\n  \t\t// Make sure to assign internal flags at the beginning,\r\n  \t\t// to avoid inconsistent state in some edge cases.\r\n  \t\tthis._handlers = [];\r\n  \t\tthis._layers = {};\r\n  \t\tthis._zoomBoundLayers = {};\r\n  \t\tthis._sizeChanged = true;\r\n\r\n  \t\tthis._initContainer(id);\r\n  \t\tthis._initLayout();\r\n\r\n  \t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n  \t\tthis._onResize = bind(this._onResize, this);\r\n\r\n  \t\tthis._initEvents();\r\n\r\n  \t\tif (options.maxBounds) {\r\n  \t\t\tthis.setMaxBounds(options.maxBounds);\r\n  \t\t}\r\n\r\n  \t\tif (options.zoom !== undefined) {\r\n  \t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n  \t\t}\r\n\r\n  \t\tif (options.center && options.zoom !== undefined) {\r\n  \t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n  \t\t}\r\n\r\n  \t\tthis.callInitHooks();\r\n\r\n  \t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n  \t\tthis._zoomAnimated = TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n  \t\t\t\tthis.options.zoomAnimation;\r\n\r\n  \t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n  \t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n  \t\tif (this._zoomAnimated) {\r\n  \t\t\tthis._createAnimProxy();\r\n  \t\t\ton(this._proxy, TRANSITION_END, this._catchTransitionEnd, this);\r\n  \t\t}\r\n\r\n  \t\tthis._addLayers(this.options.layers);\r\n  \t},\r\n\r\n\r\n  \t// @section Methods for modifying map state\r\n\r\n  \t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n  \t// Sets the view of the map (geographical center and zoom) with the given\r\n  \t// animation options.\r\n  \tsetView: function (center, zoom, options) {\r\n\r\n  \t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n  \t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n  \t\toptions = options || {};\r\n\r\n  \t\tthis._stop();\r\n\r\n  \t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n  \t\t\tif (options.animate !== undefined) {\r\n  \t\t\t\toptions.zoom = extend({animate: options.animate}, options.zoom);\r\n  \t\t\t\toptions.pan = extend({animate: options.animate, duration: options.duration}, options.pan);\r\n  \t\t\t}\r\n\r\n  \t\t\t// try animating pan or zoom\r\n  \t\t\tvar moved = (this._zoom !== zoom) ?\r\n  \t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n  \t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n  \t\t\tif (moved) {\r\n  \t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n  \t\t\t\tclearTimeout(this._sizeTimer);\r\n  \t\t\t\treturn this;\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\t// animation didn't start, just reset the map view\r\n  \t\tthis._resetView(center, zoom, options.pan && options.pan.noMoveStart);\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n  \t// Sets the zoom of the map.\r\n  \tsetZoom: function (zoom, options) {\r\n  \t\tif (!this._loaded) {\r\n  \t\t\tthis._zoom = zoom;\r\n  \t\t\treturn this;\r\n  \t\t}\r\n  \t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n  \t},\r\n\r\n  \t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n  \t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n  \tzoomIn: function (delta, options) {\r\n  \t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n  \t\treturn this.setZoom(this._zoom + delta, options);\r\n  \t},\r\n\r\n  \t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n  \t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n  \tzoomOut: function (delta, options) {\r\n  \t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n  \t\treturn this.setZoom(this._zoom - delta, options);\r\n  \t},\r\n\r\n  \t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n  \t// Zooms the map while keeping a specified geographical point on the map\r\n  \t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n  \t// @alternative\r\n  \t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n  \t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n  \tsetZoomAround: function (latlng, zoom, options) {\r\n  \t\tvar scale = this.getZoomScale(zoom),\r\n  \t\t    viewHalf = this.getSize().divideBy(2),\r\n  \t\t    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n  \t\t    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n  \t\t    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n  \t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n  \t},\r\n\r\n  \t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n  \t\toptions = options || {};\r\n  \t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n  \t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n  \t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n  \t\t    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n  \t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n  \t\tif (zoom === Infinity) {\r\n  \t\t\treturn {\r\n  \t\t\t\tcenter: bounds.getCenter(),\r\n  \t\t\t\tzoom: zoom\r\n  \t\t\t};\r\n  \t\t}\r\n\r\n  \t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n  \t\t    swPoint = this.project(bounds.getSouthWest(), zoom),\r\n  \t\t    nePoint = this.project(bounds.getNorthEast(), zoom),\r\n  \t\t    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n  \t\treturn {\r\n  \t\t\tcenter: center,\r\n  \t\t\tzoom: zoom\r\n  \t\t};\r\n  \t},\r\n\r\n  \t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n  \t// Sets a map view that contains the given geographical bounds with the\r\n  \t// maximum zoom level possible.\r\n  \tfitBounds: function (bounds, options) {\r\n\r\n  \t\tbounds = toLatLngBounds(bounds);\r\n\r\n  \t\tif (!bounds.isValid()) {\r\n  \t\t\tthrow new Error('Bounds are not valid.');\r\n  \t\t}\r\n\r\n  \t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n  \t\treturn this.setView(target.center, target.zoom, options);\r\n  \t},\r\n\r\n  \t// @method fitWorld(options?: fitBounds options): this\r\n  \t// Sets a map view that mostly contains the whole world with the maximum\r\n  \t// zoom level possible.\r\n  \tfitWorld: function (options) {\r\n  \t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n  \t},\r\n\r\n  \t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n  \t// Pans the map to a given center.\r\n  \tpanTo: function (center, options) { // (LatLng)\r\n  \t\treturn this.setView(center, this._zoom, {pan: options});\r\n  \t},\r\n\r\n  \t// @method panBy(offset: Point, options?: Pan options): this\r\n  \t// Pans the map by a given number of pixels (animated).\r\n  \tpanBy: function (offset, options) {\r\n  \t\toffset = toPoint(offset).round();\r\n  \t\toptions = options || {};\r\n\r\n  \t\tif (!offset.x && !offset.y) {\r\n  \t\t\treturn this.fire('moveend');\r\n  \t\t}\r\n  \t\t// If we pan too far, Chrome gets issues with tiles\r\n  \t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n  \t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n  \t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n  \t\t\treturn this;\r\n  \t\t}\r\n\r\n  \t\tif (!this._panAnim) {\r\n  \t\t\tthis._panAnim = new PosAnimation();\r\n\r\n  \t\t\tthis._panAnim.on({\r\n  \t\t\t\t'step': this._onPanTransitionStep,\r\n  \t\t\t\t'end': this._onPanTransitionEnd\r\n  \t\t\t}, this);\r\n  \t\t}\r\n\r\n  \t\t// don't fire movestart if animating inertia\r\n  \t\tif (!options.noMoveStart) {\r\n  \t\t\tthis.fire('movestart');\r\n  \t\t}\r\n\r\n  \t\t// animate pan unless animate: false specified\r\n  \t\tif (options.animate !== false) {\r\n  \t\t\taddClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n  \t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n  \t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n  \t\t} else {\r\n  \t\t\tthis._rawPanBy(offset);\r\n  \t\t\tthis.fire('move').fire('moveend');\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n  \t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n  \t// pan-zoom animation.\r\n  \tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n  \t\toptions = options || {};\r\n  \t\tif (options.animate === false || !Browser.any3d) {\r\n  \t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n  \t\t}\r\n\r\n  \t\tthis._stop();\r\n\r\n  \t\tvar from = this.project(this.getCenter()),\r\n  \t\t    to = this.project(targetCenter),\r\n  \t\t    size = this.getSize(),\r\n  \t\t    startZoom = this._zoom;\r\n\r\n  \t\ttargetCenter = toLatLng(targetCenter);\r\n  \t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n  \t\tvar w0 = Math.max(size.x, size.y),\r\n  \t\t    w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n  \t\t    u1 = (to.distanceTo(from)) || 1,\r\n  \t\t    rho = 1.42,\r\n  \t\t    rho2 = rho * rho;\r\n\r\n  \t\tfunction r(i) {\r\n  \t\t\tvar s1 = i ? -1 : 1,\r\n  \t\t\t    s2 = i ? w1 : w0,\r\n  \t\t\t    t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n  \t\t\t    b1 = 2 * s2 * rho2 * u1,\r\n  \t\t\t    b = t1 / b1,\r\n  \t\t\t    sq = Math.sqrt(b * b + 1) - b;\r\n\r\n  \t\t\t    // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n  \t\t\t    // thus triggering an infinite loop in flyTo\r\n  \t\t\t    var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n  \t\t\treturn log;\r\n  \t\t}\r\n\r\n  \t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n  \t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n  \t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n  \t\tvar r0 = r(0);\r\n\r\n  \t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n  \t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n  \t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n  \t\tvar start = Date.now(),\r\n  \t\t    S = (r(1) - r0) / rho,\r\n  \t\t    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n  \t\tfunction frame() {\r\n  \t\t\tvar t = (Date.now() - start) / duration,\r\n  \t\t\t    s = easeOut(t) * S;\r\n\r\n  \t\t\tif (t <= 1) {\r\n  \t\t\t\tthis._flyToFrame = requestAnimFrame(frame, this);\r\n\r\n  \t\t\t\tthis._move(\r\n  \t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n  \t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n  \t\t\t\t\t{flyTo: true});\r\n\r\n  \t\t\t} else {\r\n  \t\t\t\tthis\r\n  \t\t\t\t\t._move(targetCenter, targetZoom)\r\n  \t\t\t\t\t._moveEnd(true);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n  \t\tframe.call(this);\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n  \t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n  \t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n  \tflyToBounds: function (bounds, options) {\r\n  \t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n  \t\treturn this.flyTo(target.center, target.zoom, options);\r\n  \t},\r\n\r\n  \t// @method setMaxBounds(bounds: LatLngBounds): this\r\n  \t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n  \tsetMaxBounds: function (bounds) {\r\n  \t\tbounds = toLatLngBounds(bounds);\r\n\r\n  \t\tif (this.listens('moveend', this._panInsideMaxBounds)) {\r\n  \t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n  \t\t}\r\n\r\n  \t\tif (!bounds.isValid()) {\r\n  \t\t\tthis.options.maxBounds = null;\r\n  \t\t\treturn this;\r\n  \t\t}\r\n\r\n  \t\tthis.options.maxBounds = bounds;\r\n\r\n  \t\tif (this._loaded) {\r\n  \t\t\tthis._panInsideMaxBounds();\r\n  \t\t}\r\n\r\n  \t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n  \t},\r\n\r\n  \t// @method setMinZoom(zoom: Number): this\r\n  \t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n  \tsetMinZoom: function (zoom) {\r\n  \t\tvar oldZoom = this.options.minZoom;\r\n  \t\tthis.options.minZoom = zoom;\r\n\r\n  \t\tif (this._loaded && oldZoom !== zoom) {\r\n  \t\t\tthis.fire('zoomlevelschange');\r\n\r\n  \t\t\tif (this.getZoom() < this.options.minZoom) {\r\n  \t\t\t\treturn this.setZoom(zoom);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method setMaxZoom(zoom: Number): this\r\n  \t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n  \tsetMaxZoom: function (zoom) {\r\n  \t\tvar oldZoom = this.options.maxZoom;\r\n  \t\tthis.options.maxZoom = zoom;\r\n\r\n  \t\tif (this._loaded && oldZoom !== zoom) {\r\n  \t\t\tthis.fire('zoomlevelschange');\r\n\r\n  \t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n  \t\t\t\treturn this.setZoom(zoom);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n  \t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n  \tpanInsideBounds: function (bounds, options) {\r\n  \t\tthis._enforcingBounds = true;\r\n  \t\tvar center = this.getCenter(),\r\n  \t\t    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n  \t\tif (!center.equals(newCenter)) {\r\n  \t\t\tthis.panTo(newCenter, options);\r\n  \t\t}\r\n\r\n  \t\tthis._enforcingBounds = false;\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method panInside(latlng: LatLng, options?: padding options): this\r\n  \t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n  \t// padding options to fit the display to more restricted bounds.\r\n  \t// If `latlng` is already within the (optionally padded) display bounds,\r\n  \t// the map will not be panned.\r\n  \tpanInside: function (latlng, options) {\r\n  \t\toptions = options || {};\r\n\r\n  \t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n  \t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n  \t\t    pixelCenter = this.project(this.getCenter()),\r\n  \t\t    pixelPoint = this.project(latlng),\r\n  \t\t    pixelBounds = this.getPixelBounds(),\r\n  \t\t    paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\r\n  \t\t    paddedSize = paddedBounds.getSize();\r\n\r\n  \t\tif (!paddedBounds.contains(pixelPoint)) {\r\n  \t\t\tthis._enforcingBounds = true;\r\n  \t\t\tvar centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\r\n  \t\t\tvar offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\r\n  \t\t\tpixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\r\n  \t\t\tpixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\r\n  \t\t\tthis.panTo(this.unproject(pixelCenter), options);\r\n  \t\t\tthis._enforcingBounds = false;\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method invalidateSize(options: Zoom/pan options): this\r\n  \t// Checks if the map container size changed and updates the map if so —\r\n  \t// call it after you've changed the map size dynamically, also animating\r\n  \t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n  \t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n  \t// that it doesn't happen often even if the method is called many\r\n  \t// times in a row.\r\n\r\n  \t// @alternative\r\n  \t// @method invalidateSize(animate: Boolean): this\r\n  \t// Checks if the map container size changed and updates the map if so —\r\n  \t// call it after you've changed the map size dynamically, also animating\r\n  \t// pan by default.\r\n  \tinvalidateSize: function (options) {\r\n  \t\tif (!this._loaded) { return this; }\r\n\r\n  \t\toptions = extend({\r\n  \t\t\tanimate: false,\r\n  \t\t\tpan: true\r\n  \t\t}, options === true ? {animate: true} : options);\r\n\r\n  \t\tvar oldSize = this.getSize();\r\n  \t\tthis._sizeChanged = true;\r\n  \t\tthis._lastCenter = null;\r\n\r\n  \t\tvar newSize = this.getSize(),\r\n  \t\t    oldCenter = oldSize.divideBy(2).round(),\r\n  \t\t    newCenter = newSize.divideBy(2).round(),\r\n  \t\t    offset = oldCenter.subtract(newCenter);\r\n\r\n  \t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n  \t\tif (options.animate && options.pan) {\r\n  \t\t\tthis.panBy(offset);\r\n\r\n  \t\t} else {\r\n  \t\t\tif (options.pan) {\r\n  \t\t\t\tthis._rawPanBy(offset);\r\n  \t\t\t}\r\n\r\n  \t\t\tthis.fire('move');\r\n\r\n  \t\t\tif (options.debounceMoveend) {\r\n  \t\t\t\tclearTimeout(this._sizeTimer);\r\n  \t\t\t\tthis._sizeTimer = setTimeout(bind(this.fire, this, 'moveend'), 200);\r\n  \t\t\t} else {\r\n  \t\t\t\tthis.fire('moveend');\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\t// @section Map state change events\r\n  \t\t// @event resize: ResizeEvent\r\n  \t\t// Fired when the map is resized.\r\n  \t\treturn this.fire('resize', {\r\n  \t\t\toldSize: oldSize,\r\n  \t\t\tnewSize: newSize\r\n  \t\t});\r\n  \t},\r\n\r\n  \t// @section Methods for modifying map state\r\n  \t// @method stop(): this\r\n  \t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n  \tstop: function () {\r\n  \t\tthis.setZoom(this._limitZoom(this._zoom));\r\n  \t\tif (!this.options.zoomSnap) {\r\n  \t\t\tthis.fire('viewreset');\r\n  \t\t}\r\n  \t\treturn this._stop();\r\n  \t},\r\n\r\n  \t// @section Geolocation methods\r\n  \t// @method locate(options?: Locate options): this\r\n  \t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n  \t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n  \t// and optionally sets the map view to the user's location with respect to\r\n  \t// detection accuracy (or to the world view if geolocation failed).\r\n  \t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n  \t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n  \t// See `Locate options` for more details.\r\n  \tlocate: function (options) {\r\n\r\n  \t\toptions = this._locateOptions = extend({\r\n  \t\t\ttimeout: 10000,\r\n  \t\t\twatch: false\r\n  \t\t\t// setView: false\r\n  \t\t\t// maxZoom: <Number>\r\n  \t\t\t// maximumAge: 0\r\n  \t\t\t// enableHighAccuracy: false\r\n  \t\t}, options);\r\n\r\n  \t\tif (!('geolocation' in navigator)) {\r\n  \t\t\tthis._handleGeolocationError({\r\n  \t\t\t\tcode: 0,\r\n  \t\t\t\tmessage: 'Geolocation not supported.'\r\n  \t\t\t});\r\n  \t\t\treturn this;\r\n  \t\t}\r\n\r\n  \t\tvar onResponse = bind(this._handleGeolocationResponse, this),\r\n  \t\t    onError = bind(this._handleGeolocationError, this);\r\n\r\n  \t\tif (options.watch) {\r\n  \t\t\tthis._locationWatchId =\r\n  \t\t\t        navigator.geolocation.watchPosition(onResponse, onError, options);\r\n  \t\t} else {\r\n  \t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method stopLocate(): this\r\n  \t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n  \t// and aborts resetting the map view if map.locate was called with\r\n  \t// `{setView: true}`.\r\n  \tstopLocate: function () {\r\n  \t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n  \t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n  \t\t}\r\n  \t\tif (this._locateOptions) {\r\n  \t\t\tthis._locateOptions.setView = false;\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_handleGeolocationError: function (error) {\r\n  \t\tif (!this._container._leaflet_id) { return; }\r\n\r\n  \t\tvar c = error.code,\r\n  \t\t    message = error.message ||\r\n  \t\t            (c === 1 ? 'permission denied' :\r\n  \t\t            (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n  \t\tif (this._locateOptions.setView && !this._loaded) {\r\n  \t\t\tthis.fitWorld();\r\n  \t\t}\r\n\r\n  \t\t// @section Location events\r\n  \t\t// @event locationerror: ErrorEvent\r\n  \t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n  \t\tthis.fire('locationerror', {\r\n  \t\t\tcode: c,\r\n  \t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n  \t\t});\r\n  \t},\r\n\r\n  \t_handleGeolocationResponse: function (pos) {\r\n  \t\tif (!this._container._leaflet_id) { return; }\r\n\r\n  \t\tvar lat = pos.coords.latitude,\r\n  \t\t    lng = pos.coords.longitude,\r\n  \t\t    latlng = new LatLng(lat, lng),\r\n  \t\t    bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n  \t\t    options = this._locateOptions;\r\n\r\n  \t\tif (options.setView) {\r\n  \t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n  \t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n  \t\t}\r\n\r\n  \t\tvar data = {\r\n  \t\t\tlatlng: latlng,\r\n  \t\t\tbounds: bounds,\r\n  \t\t\ttimestamp: pos.timestamp\r\n  \t\t};\r\n\r\n  \t\tfor (var i in pos.coords) {\r\n  \t\t\tif (typeof pos.coords[i] === 'number') {\r\n  \t\t\t\tdata[i] = pos.coords[i];\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\t// @event locationfound: LocationEvent\r\n  \t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n  \t\t// went successfully.\r\n  \t\tthis.fire('locationfound', data);\r\n  \t},\r\n\r\n  \t// TODO Appropriate docs section?\r\n  \t// @section Other Methods\r\n  \t// @method addHandler(name: String, HandlerClass: Function): this\r\n  \t// Adds a new `Handler` to the map, given its name and constructor function.\r\n  \taddHandler: function (name, HandlerClass) {\r\n  \t\tif (!HandlerClass) { return this; }\r\n\r\n  \t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n  \t\tthis._handlers.push(handler);\r\n\r\n  \t\tif (this.options[name]) {\r\n  \t\t\thandler.enable();\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method remove(): this\r\n  \t// Destroys the map and clears all related event listeners.\r\n  \tremove: function () {\r\n\r\n  \t\tthis._initEvents(true);\r\n  \t\tif (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }\r\n\r\n  \t\tif (this._containerId !== this._container._leaflet_id) {\r\n  \t\t\tthrow new Error('Map container is being reused by another instance');\r\n  \t\t}\r\n\r\n  \t\ttry {\r\n  \t\t\t// throws error in IE6-8\r\n  \t\t\tdelete this._container._leaflet_id;\r\n  \t\t\tdelete this._containerId;\r\n  \t\t} catch (e) {\r\n  \t\t\t/*eslint-disable */\r\n  \t\t\tthis._container._leaflet_id = undefined;\r\n  \t\t\t/* eslint-enable */\r\n  \t\t\tthis._containerId = undefined;\r\n  \t\t}\r\n\r\n  \t\tif (this._locationWatchId !== undefined) {\r\n  \t\t\tthis.stopLocate();\r\n  \t\t}\r\n\r\n  \t\tthis._stop();\r\n\r\n  \t\tremove(this._mapPane);\r\n\r\n  \t\tif (this._clearControlPos) {\r\n  \t\t\tthis._clearControlPos();\r\n  \t\t}\r\n  \t\tif (this._resizeRequest) {\r\n  \t\t\tcancelAnimFrame(this._resizeRequest);\r\n  \t\t\tthis._resizeRequest = null;\r\n  \t\t}\r\n\r\n  \t\tthis._clearHandlers();\r\n\r\n  \t\tif (this._loaded) {\r\n  \t\t\t// @section Map state change events\r\n  \t\t\t// @event unload: Event\r\n  \t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n  \t\t\tthis.fire('unload');\r\n  \t\t}\r\n\r\n  \t\tvar i;\r\n  \t\tfor (i in this._layers) {\r\n  \t\t\tthis._layers[i].remove();\r\n  \t\t}\r\n  \t\tfor (i in this._panes) {\r\n  \t\t\tremove(this._panes[i]);\r\n  \t\t}\r\n\r\n  \t\tthis._layers = [];\r\n  \t\tthis._panes = [];\r\n  \t\tdelete this._mapPane;\r\n  \t\tdelete this._renderer;\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @section Other Methods\r\n  \t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n  \t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n  \t// then returns it. The pane is created as a child of `container`, or\r\n  \t// as a child of the main map pane if not set.\r\n  \tcreatePane: function (name, container) {\r\n  \t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n  \t\t    pane = create$1('div', className, container || this._mapPane);\r\n\r\n  \t\tif (name) {\r\n  \t\t\tthis._panes[name] = pane;\r\n  \t\t}\r\n  \t\treturn pane;\r\n  \t},\r\n\r\n  \t// @section Methods for Getting Map State\r\n\r\n  \t// @method getCenter(): LatLng\r\n  \t// Returns the geographical center of the map view\r\n  \tgetCenter: function () {\r\n  \t\tthis._checkIfLoaded();\r\n\r\n  \t\tif (this._lastCenter && !this._moved()) {\r\n  \t\t\treturn this._lastCenter.clone();\r\n  \t\t}\r\n  \t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n  \t},\r\n\r\n  \t// @method getZoom(): Number\r\n  \t// Returns the current zoom level of the map view\r\n  \tgetZoom: function () {\r\n  \t\treturn this._zoom;\r\n  \t},\r\n\r\n  \t// @method getBounds(): LatLngBounds\r\n  \t// Returns the geographical bounds visible in the current map view\r\n  \tgetBounds: function () {\r\n  \t\tvar bounds = this.getPixelBounds(),\r\n  \t\t    sw = this.unproject(bounds.getBottomLeft()),\r\n  \t\t    ne = this.unproject(bounds.getTopRight());\r\n\r\n  \t\treturn new LatLngBounds(sw, ne);\r\n  \t},\r\n\r\n  \t// @method getMinZoom(): Number\r\n  \t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n  \tgetMinZoom: function () {\r\n  \t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n  \t},\r\n\r\n  \t// @method getMaxZoom(): Number\r\n  \t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n  \tgetMaxZoom: function () {\r\n  \t\treturn this.options.maxZoom === undefined ?\r\n  \t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n  \t\t\tthis.options.maxZoom;\r\n  \t},\r\n\r\n  \t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n  \t// Returns the maximum zoom level on which the given bounds fit to the map\r\n  \t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n  \t// instead returns the minimum zoom level on which the map view fits into\r\n  \t// the given bounds in its entirety.\r\n  \tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n  \t\tbounds = toLatLngBounds(bounds);\r\n  \t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n  \t\tvar zoom = this.getZoom() || 0,\r\n  \t\t    min = this.getMinZoom(),\r\n  \t\t    max = this.getMaxZoom(),\r\n  \t\t    nw = bounds.getNorthWest(),\r\n  \t\t    se = bounds.getSouthEast(),\r\n  \t\t    size = this.getSize().subtract(padding),\r\n  \t\t    boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n  \t\t    snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n  \t\t    scalex = size.x / boundsSize.x,\r\n  \t\t    scaley = size.y / boundsSize.y,\r\n  \t\t    scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n  \t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n  \t\tif (snap) {\r\n  \t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n  \t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n  \t\t}\r\n\r\n  \t\treturn Math.max(min, Math.min(max, zoom));\r\n  \t},\r\n\r\n  \t// @method getSize(): Point\r\n  \t// Returns the current size of the map container (in pixels).\r\n  \tgetSize: function () {\r\n  \t\tif (!this._size || this._sizeChanged) {\r\n  \t\t\tthis._size = new Point(\r\n  \t\t\t\tthis._container.clientWidth || 0,\r\n  \t\t\t\tthis._container.clientHeight || 0);\r\n\r\n  \t\t\tthis._sizeChanged = false;\r\n  \t\t}\r\n  \t\treturn this._size.clone();\r\n  \t},\r\n\r\n  \t// @method getPixelBounds(): Bounds\r\n  \t// Returns the bounds of the current map view in projected pixel\r\n  \t// coordinates (sometimes useful in layer and overlay implementations).\r\n  \tgetPixelBounds: function (center, zoom) {\r\n  \t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n  \t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n  \t},\r\n\r\n  \t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n  \t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n  \t// since there can be negative offsets.\r\n  \t// @method getPixelOrigin(): Point\r\n  \t// Returns the projected pixel coordinates of the top left point of\r\n  \t// the map layer (useful in custom layer and overlay implementations).\r\n  \tgetPixelOrigin: function () {\r\n  \t\tthis._checkIfLoaded();\r\n  \t\treturn this._pixelOrigin;\r\n  \t},\r\n\r\n  \t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n  \t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n  \t// If `zoom` is omitted, the map's current zoom level is used.\r\n  \tgetPixelWorldBounds: function (zoom) {\r\n  \t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n  \t},\r\n\r\n  \t// @section Other Methods\r\n\r\n  \t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n  \t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n  \tgetPane: function (pane) {\r\n  \t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n  \t},\r\n\r\n  \t// @method getPanes(): Object\r\n  \t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n  \t// the panes as values.\r\n  \tgetPanes: function () {\r\n  \t\treturn this._panes;\r\n  \t},\r\n\r\n  \t// @method getContainer: HTMLElement\r\n  \t// Returns the HTML element that contains the map.\r\n  \tgetContainer: function () {\r\n  \t\treturn this._container;\r\n  \t},\r\n\r\n\r\n  \t// @section Conversion Methods\r\n\r\n  \t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n  \t// Returns the scale factor to be applied to a map transition from zoom level\r\n  \t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n  \tgetZoomScale: function (toZoom, fromZoom) {\r\n  \t\t// TODO replace with universal implementation after refactoring projections\r\n  \t\tvar crs = this.options.crs;\r\n  \t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n  \t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n  \t},\r\n\r\n  \t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n  \t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n  \t// level and everything is scaled by a factor of `scale`. Inverse of\r\n  \t// [`getZoomScale`](#map-getZoomScale).\r\n  \tgetScaleZoom: function (scale, fromZoom) {\r\n  \t\tvar crs = this.options.crs;\r\n  \t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n  \t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n  \t\treturn isNaN(zoom) ? Infinity : zoom;\r\n  \t},\r\n\r\n  \t// @method project(latlng: LatLng, zoom: Number): Point\r\n  \t// Projects a geographical coordinate `LatLng` according to the projection\r\n  \t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n  \t// `Transformation`. The result is pixel coordinate relative to\r\n  \t// the CRS origin.\r\n  \tproject: function (latlng, zoom) {\r\n  \t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n  \t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n  \t},\r\n\r\n  \t// @method unproject(point: Point, zoom: Number): LatLng\r\n  \t// Inverse of [`project`](#map-project).\r\n  \tunproject: function (point, zoom) {\r\n  \t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n  \t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n  \t},\r\n\r\n  \t// @method layerPointToLatLng(point: Point): LatLng\r\n  \t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n  \t// returns the corresponding geographical coordinate (for the current zoom level).\r\n  \tlayerPointToLatLng: function (point) {\r\n  \t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n  \t\treturn this.unproject(projectedPoint);\r\n  \t},\r\n\r\n  \t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n  \t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n  \t// relative to the [origin pixel](#map-getpixelorigin).\r\n  \tlatLngToLayerPoint: function (latlng) {\r\n  \t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n  \t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n  \t},\r\n\r\n  \t// @method wrapLatLng(latlng: LatLng): LatLng\r\n  \t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n  \t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n  \t// CRS's bounds.\r\n  \t// By default this means longitude is wrapped around the dateline so its\r\n  \t// value is between -180 and +180 degrees.\r\n  \twrapLatLng: function (latlng) {\r\n  \t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n  \t},\r\n\r\n  \t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n  \t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n  \t// its center is within the CRS's bounds.\r\n  \t// By default this means the center longitude is wrapped around the dateline so its\r\n  \t// value is between -180 and +180 degrees, and the majority of the bounds\r\n  \t// overlaps the CRS's bounds.\r\n  \twrapLatLngBounds: function (latlng) {\r\n  \t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n  \t},\r\n\r\n  \t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n  \t// Returns the distance between two geographical coordinates according to\r\n  \t// the map's CRS. By default this measures distance in meters.\r\n  \tdistance: function (latlng1, latlng2) {\r\n  \t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n  \t},\r\n\r\n  \t// @method containerPointToLayerPoint(point: Point): Point\r\n  \t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n  \t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n  \tcontainerPointToLayerPoint: function (point) { // (Point)\r\n  \t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n  \t},\r\n\r\n  \t// @method layerPointToContainerPoint(point: Point): Point\r\n  \t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n  \t// returns the corresponding pixel coordinate relative to the map container.\r\n  \tlayerPointToContainerPoint: function (point) { // (Point)\r\n  \t\treturn toPoint(point).add(this._getMapPanePos());\r\n  \t},\r\n\r\n  \t// @method containerPointToLatLng(point: Point): LatLng\r\n  \t// Given a pixel coordinate relative to the map container, returns\r\n  \t// the corresponding geographical coordinate (for the current zoom level).\r\n  \tcontainerPointToLatLng: function (point) {\r\n  \t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n  \t\treturn this.layerPointToLatLng(layerPoint);\r\n  \t},\r\n\r\n  \t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n  \t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n  \t// relative to the map container.\r\n  \tlatLngToContainerPoint: function (latlng) {\r\n  \t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n  \t},\r\n\r\n  \t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n  \t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n  \t// map container where the event took place.\r\n  \tmouseEventToContainerPoint: function (e) {\r\n  \t\treturn getMousePosition(e, this._container);\r\n  \t},\r\n\r\n  \t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n  \t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n  \t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n  \tmouseEventToLayerPoint: function (e) {\r\n  \t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n  \t},\r\n\r\n  \t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n  \t// Given a MouseEvent object, returns geographical coordinate where the\r\n  \t// event took place.\r\n  \tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n  \t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n  \t},\r\n\r\n\r\n  \t// map initialization methods\r\n\r\n  \t_initContainer: function (id) {\r\n  \t\tvar container = this._container = get(id);\r\n\r\n  \t\tif (!container) {\r\n  \t\t\tthrow new Error('Map container not found.');\r\n  \t\t} else if (container._leaflet_id) {\r\n  \t\t\tthrow new Error('Map container is already initialized.');\r\n  \t\t}\r\n\r\n  \t\ton(container, 'scroll', this._onScroll, this);\r\n  \t\tthis._containerId = stamp(container);\r\n  \t},\r\n\r\n  \t_initLayout: function () {\r\n  \t\tvar container = this._container;\r\n\r\n  \t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n  \t\taddClass(container, 'leaflet-container' +\r\n  \t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n  \t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n  \t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n  \t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n  \t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n  \t\tvar position = getStyle(container, 'position');\r\n\r\n  \t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {\r\n  \t\t\tcontainer.style.position = 'relative';\r\n  \t\t}\r\n\r\n  \t\tthis._initPanes();\r\n\r\n  \t\tif (this._initControlPos) {\r\n  \t\t\tthis._initControlPos();\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_initPanes: function () {\r\n  \t\tvar panes = this._panes = {};\r\n  \t\tthis._paneRenderers = {};\r\n\r\n  \t\t// @section\r\n  \t\t//\r\n  \t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n  \t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n  \t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n  \t\t// [`map.createPane`](#map-createpane) method.\r\n  \t\t//\r\n  \t\t// Every map has the following default panes that differ only in zIndex.\r\n  \t\t//\r\n  \t\t// @pane mapPane: HTMLElement = 'auto'\r\n  \t\t// Pane that contains all other map panes\r\n\r\n  \t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n  \t\tsetPosition(this._mapPane, new Point(0, 0));\r\n\r\n  \t\t// @pane tilePane: HTMLElement = 200\r\n  \t\t// Pane for `GridLayer`s and `TileLayer`s\r\n  \t\tthis.createPane('tilePane');\r\n  \t\t// @pane overlayPane: HTMLElement = 400\r\n  \t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n  \t\tthis.createPane('overlayPane');\r\n  \t\t// @pane shadowPane: HTMLElement = 500\r\n  \t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n  \t\tthis.createPane('shadowPane');\r\n  \t\t// @pane markerPane: HTMLElement = 600\r\n  \t\t// Pane for `Icon`s of `Marker`s\r\n  \t\tthis.createPane('markerPane');\r\n  \t\t// @pane tooltipPane: HTMLElement = 650\r\n  \t\t// Pane for `Tooltip`s.\r\n  \t\tthis.createPane('tooltipPane');\r\n  \t\t// @pane popupPane: HTMLElement = 700\r\n  \t\t// Pane for `Popup`s.\r\n  \t\tthis.createPane('popupPane');\r\n\r\n  \t\tif (!this.options.markerZoomAnimation) {\r\n  \t\t\taddClass(panes.markerPane, 'leaflet-zoom-hide');\r\n  \t\t\taddClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n  \t\t}\r\n  \t},\r\n\r\n\r\n  \t// private methods that modify map state\r\n\r\n  \t// @section Map state change events\r\n  \t_resetView: function (center, zoom, noMoveStart) {\r\n  \t\tsetPosition(this._mapPane, new Point(0, 0));\r\n\r\n  \t\tvar loading = !this._loaded;\r\n  \t\tthis._loaded = true;\r\n  \t\tzoom = this._limitZoom(zoom);\r\n\r\n  \t\tthis.fire('viewprereset');\r\n\r\n  \t\tvar zoomChanged = this._zoom !== zoom;\r\n  \t\tthis\r\n  \t\t\t._moveStart(zoomChanged, noMoveStart)\r\n  \t\t\t._move(center, zoom)\r\n  \t\t\t._moveEnd(zoomChanged);\r\n\r\n  \t\t// @event viewreset: Event\r\n  \t\t// Fired when the map needs to redraw its content (this usually happens\r\n  \t\t// on map zoom or load). Very useful for creating custom overlays.\r\n  \t\tthis.fire('viewreset');\r\n\r\n  \t\t// @event load: Event\r\n  \t\t// Fired when the map is initialized (when its center and zoom are set\r\n  \t\t// for the first time).\r\n  \t\tif (loading) {\r\n  \t\t\tthis.fire('load');\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_moveStart: function (zoomChanged, noMoveStart) {\r\n  \t\t// @event zoomstart: Event\r\n  \t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n  \t\t// @event movestart: Event\r\n  \t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n  \t\tif (zoomChanged) {\r\n  \t\t\tthis.fire('zoomstart');\r\n  \t\t}\r\n  \t\tif (!noMoveStart) {\r\n  \t\t\tthis.fire('movestart');\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_move: function (center, zoom, data, supressEvent) {\r\n  \t\tif (zoom === undefined) {\r\n  \t\t\tzoom = this._zoom;\r\n  \t\t}\r\n  \t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n  \t\tthis._zoom = zoom;\r\n  \t\tthis._lastCenter = center;\r\n  \t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n  \t\tif (!supressEvent) {\r\n  \t\t\t// @event zoom: Event\r\n  \t\t\t// Fired repeatedly during any change in zoom level,\r\n  \t\t\t// including zoom and fly animations.\r\n  \t\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n  \t\t\t\tthis.fire('zoom', data);\r\n  \t\t\t}\r\n\r\n  \t\t\t// @event move: Event\r\n  \t\t\t// Fired repeatedly during any movement of the map,\r\n  \t\t\t// including pan and fly animations.\r\n  \t\t\tthis.fire('move', data);\r\n  \t\t} else if (data && data.pinch) {\t// Always fire 'zoom' if pinching because #3530\r\n  \t\t\tthis.fire('zoom', data);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_moveEnd: function (zoomChanged) {\r\n  \t\t// @event zoomend: Event\r\n  \t\t// Fired when the map zoom changed, after any animations.\r\n  \t\tif (zoomChanged) {\r\n  \t\t\tthis.fire('zoomend');\r\n  \t\t}\r\n\r\n  \t\t// @event moveend: Event\r\n  \t\t// Fired when the center of the map stops changing\r\n  \t\t// (e.g. user stopped dragging the map or after non-centered zoom).\r\n  \t\treturn this.fire('moveend');\r\n  \t},\r\n\r\n  \t_stop: function () {\r\n  \t\tcancelAnimFrame(this._flyToFrame);\r\n  \t\tif (this._panAnim) {\r\n  \t\t\tthis._panAnim.stop();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_rawPanBy: function (offset) {\r\n  \t\tsetPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n  \t},\r\n\r\n  \t_getZoomSpan: function () {\r\n  \t\treturn this.getMaxZoom() - this.getMinZoom();\r\n  \t},\r\n\r\n  \t_panInsideMaxBounds: function () {\r\n  \t\tif (!this._enforcingBounds) {\r\n  \t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_checkIfLoaded: function () {\r\n  \t\tif (!this._loaded) {\r\n  \t\t\tthrow new Error('Set map center and zoom first.');\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// DOM event handling\r\n\r\n  \t// @section Interaction events\r\n  \t_initEvents: function (remove) {\r\n  \t\tthis._targets = {};\r\n  \t\tthis._targets[stamp(this._container)] = this;\r\n\r\n  \t\tvar onOff = remove ? off : on;\r\n\r\n  \t\t// @event click: MouseEvent\r\n  \t\t// Fired when the user clicks (or taps) the map.\r\n  \t\t// @event dblclick: MouseEvent\r\n  \t\t// Fired when the user double-clicks (or double-taps) the map.\r\n  \t\t// @event mousedown: MouseEvent\r\n  \t\t// Fired when the user pushes the mouse button on the map.\r\n  \t\t// @event mouseup: MouseEvent\r\n  \t\t// Fired when the user releases the mouse button on the map.\r\n  \t\t// @event mouseover: MouseEvent\r\n  \t\t// Fired when the mouse enters the map.\r\n  \t\t// @event mouseout: MouseEvent\r\n  \t\t// Fired when the mouse leaves the map.\r\n  \t\t// @event mousemove: MouseEvent\r\n  \t\t// Fired while the mouse moves over the map.\r\n  \t\t// @event contextmenu: MouseEvent\r\n  \t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n  \t\t// default browser context menu from showing if there are listeners on\r\n  \t\t// this event. Also fired on mobile when the user holds a single touch\r\n  \t\t// for a second (also called long press).\r\n  \t\t// @event keypress: KeyboardEvent\r\n  \t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n  \t\t// @event keydown: KeyboardEvent\r\n  \t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n  \t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n  \t\t// that do not produce a character value.\r\n  \t\t// @event keyup: KeyboardEvent\r\n  \t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n  \t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n  \t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n  \t\tif (this.options.trackResize) {\r\n  \t\t\tonOff(window, 'resize', this._onResize, this);\r\n  \t\t}\r\n\r\n  \t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n  \t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_onResize: function () {\r\n  \t\tcancelAnimFrame(this._resizeRequest);\r\n  \t\tthis._resizeRequest = requestAnimFrame(\r\n  \t\t        function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n  \t},\r\n\r\n  \t_onScroll: function () {\r\n  \t\tthis._container.scrollTop  = 0;\r\n  \t\tthis._container.scrollLeft = 0;\r\n  \t},\r\n\r\n  \t_onMoveEnd: function () {\r\n  \t\tvar pos = this._getMapPanePos();\r\n  \t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n  \t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n  \t\t\t// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/\r\n  \t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_findEventTargets: function (e, type) {\r\n  \t\tvar targets = [],\r\n  \t\t    target,\r\n  \t\t    isHover = type === 'mouseout' || type === 'mouseover',\r\n  \t\t    src = e.target || e.srcElement,\r\n  \t\t    dragging = false;\r\n\r\n  \t\twhile (src) {\r\n  \t\t\ttarget = this._targets[stamp(src)];\r\n  \t\t\tif (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {\r\n  \t\t\t\t// Prevent firing click after you just dragged an object.\r\n  \t\t\t\tdragging = true;\r\n  \t\t\t\tbreak;\r\n  \t\t\t}\r\n  \t\t\tif (target && target.listens(type, true)) {\r\n  \t\t\t\tif (isHover && !isExternalTarget(src, e)) { break; }\r\n  \t\t\t\ttargets.push(target);\r\n  \t\t\t\tif (isHover) { break; }\r\n  \t\t\t}\r\n  \t\t\tif (src === this._container) { break; }\r\n  \t\t\tsrc = src.parentNode;\r\n  \t\t}\r\n  \t\tif (!targets.length && !dragging && !isHover && this.listens(type, true)) {\r\n  \t\t\ttargets = [this];\r\n  \t\t}\r\n  \t\treturn targets;\r\n  \t},\r\n\r\n  \t_isClickDisabled: function (el) {\r\n  \t\twhile (el && el !== this._container) {\r\n  \t\t\tif (el['_leaflet_disable_click']) { return true; }\r\n  \t\t\tel = el.parentNode;\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_handleDOMEvent: function (e) {\r\n  \t\tvar el = (e.target || e.srcElement);\r\n  \t\tif (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tvar type = e.type;\r\n\r\n  \t\tif (type === 'mousedown') {\r\n  \t\t\t// prevents outline when clicking on keyboard-focusable element\r\n  \t\t\tpreventOutline(el);\r\n  \t\t}\r\n\r\n  \t\tthis._fireDOMEvent(e, type);\r\n  \t},\r\n\r\n  \t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n  \t_fireDOMEvent: function (e, type, canvasTargets) {\r\n\r\n  \t\tif (e.type === 'click') {\r\n  \t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n  \t\t\t// @event preclick: MouseEvent\r\n  \t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n  \t\t\t// want something to happen on click before any existing click\r\n  \t\t\t// handlers start running).\r\n  \t\t\tvar synth = extend({}, e);\r\n  \t\t\tsynth.type = 'preclick';\r\n  \t\t\tthis._fireDOMEvent(synth, synth.type, canvasTargets);\r\n  \t\t}\r\n\r\n  \t\t// Find the layer the event is propagating from and its parents.\r\n  \t\tvar targets = this._findEventTargets(e, type);\r\n\r\n  \t\tif (canvasTargets) {\r\n  \t\t\tvar filtered = []; // pick only targets with listeners\r\n  \t\t\tfor (var i = 0; i < canvasTargets.length; i++) {\r\n  \t\t\t\tif (canvasTargets[i].listens(type, true)) {\r\n  \t\t\t\t\tfiltered.push(canvasTargets[i]);\r\n  \t\t\t\t}\r\n  \t\t\t}\r\n  \t\t\ttargets = filtered.concat(targets);\r\n  \t\t}\r\n\r\n  \t\tif (!targets.length) { return; }\r\n\r\n  \t\tif (type === 'contextmenu') {\r\n  \t\t\tpreventDefault(e);\r\n  \t\t}\r\n\r\n  \t\tvar target = targets[0];\r\n  \t\tvar data = {\r\n  \t\t\toriginalEvent: e\r\n  \t\t};\r\n\r\n  \t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n  \t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n  \t\t\tdata.containerPoint = isMarker ?\r\n  \t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n  \t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n  \t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n  \t\t}\r\n\r\n  \t\tfor (i = 0; i < targets.length; i++) {\r\n  \t\t\ttargets[i].fire(type, data, true);\r\n  \t\t\tif (data.originalEvent._stopped ||\r\n  \t\t\t\t(targets[i].options.bubblingMouseEvents === false && indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_draggableMoved: function (obj) {\r\n  \t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n  \t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n  \t},\r\n\r\n  \t_clearHandlers: function () {\r\n  \t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n  \t\t\tthis._handlers[i].disable();\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @section Other Methods\r\n\r\n  \t// @method whenReady(fn: Function, context?: Object): this\r\n  \t// Runs the given function `fn` when the map gets initialized with\r\n  \t// a view (center and zoom) and at least one layer, or immediately\r\n  \t// if it's already initialized, optionally passing a function context.\r\n  \twhenReady: function (callback, context) {\r\n  \t\tif (this._loaded) {\r\n  \t\t\tcallback.call(context || this, {target: this});\r\n  \t\t} else {\r\n  \t\t\tthis.on('load', callback, context);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n\r\n  \t// private methods for getting map state\r\n\r\n  \t_getMapPanePos: function () {\r\n  \t\treturn getPosition(this._mapPane) || new Point(0, 0);\r\n  \t},\r\n\r\n  \t_moved: function () {\r\n  \t\tvar pos = this._getMapPanePos();\r\n  \t\treturn pos && !pos.equals([0, 0]);\r\n  \t},\r\n\r\n  \t_getTopLeftPoint: function (center, zoom) {\r\n  \t\tvar pixelOrigin = center && zoom !== undefined ?\r\n  \t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n  \t\t\tthis.getPixelOrigin();\r\n  \t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n  \t},\r\n\r\n  \t_getNewPixelOrigin: function (center, zoom) {\r\n  \t\tvar viewHalf = this.getSize()._divideBy(2);\r\n  \t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n  \t},\r\n\r\n  \t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n  \t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n  \t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n  \t},\r\n\r\n  \t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n  \t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n  \t\treturn toBounds([\r\n  \t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n  \t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n  \t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n  \t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n  \t\t]);\r\n  \t},\r\n\r\n  \t// layer point of the current center\r\n  \t_getCenterLayerPoint: function () {\r\n  \t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n  \t},\r\n\r\n  \t// offset of the specified place to the current center in pixels\r\n  \t_getCenterOffset: function (latlng) {\r\n  \t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n  \t},\r\n\r\n  \t// adjust center for view to get inside bounds\r\n  \t_limitCenter: function (center, zoom, bounds) {\r\n\r\n  \t\tif (!bounds) { return center; }\r\n\r\n  \t\tvar centerPoint = this.project(center, zoom),\r\n  \t\t    viewHalf = this.getSize().divideBy(2),\r\n  \t\t    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n  \t\t    offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n  \t\t// If offset is less than a pixel, ignore.\r\n  \t\t// This prevents unstable projections from getting into\r\n  \t\t// an infinite loop of tiny offsets.\r\n  \t\tif (offset.round().equals([0, 0])) {\r\n  \t\t\treturn center;\r\n  \t\t}\r\n\r\n  \t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n  \t},\r\n\r\n  \t// adjust offset for view to get inside bounds\r\n  \t_limitOffset: function (offset, bounds) {\r\n  \t\tif (!bounds) { return offset; }\r\n\r\n  \t\tvar viewBounds = this.getPixelBounds(),\r\n  \t\t    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n  \t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n  \t},\r\n\r\n  \t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n  \t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n  \t\tvar projectedMaxBounds = toBounds(\r\n  \t\t        this.project(maxBounds.getNorthEast(), zoom),\r\n  \t\t        this.project(maxBounds.getSouthWest(), zoom)\r\n  \t\t    ),\r\n  \t\t    minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n  \t\t    maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n  \t\t    dx = this._rebound(minOffset.x, -maxOffset.x),\r\n  \t\t    dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n  \t\treturn new Point(dx, dy);\r\n  \t},\r\n\r\n  \t_rebound: function (left, right) {\r\n  \t\treturn left + right > 0 ?\r\n  \t\t\tMath.round(left - right) / 2 :\r\n  \t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n  \t},\r\n\r\n  \t_limitZoom: function (zoom) {\r\n  \t\tvar min = this.getMinZoom(),\r\n  \t\t    max = this.getMaxZoom(),\r\n  \t\t    snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n  \t\tif (snap) {\r\n  \t\t\tzoom = Math.round(zoom / snap) * snap;\r\n  \t\t}\r\n  \t\treturn Math.max(min, Math.min(max, zoom));\r\n  \t},\r\n\r\n  \t_onPanTransitionStep: function () {\r\n  \t\tthis.fire('move');\r\n  \t},\r\n\r\n  \t_onPanTransitionEnd: function () {\r\n  \t\tremoveClass(this._mapPane, 'leaflet-pan-anim');\r\n  \t\tthis.fire('moveend');\r\n  \t},\r\n\r\n  \t_tryAnimatedPan: function (center, options) {\r\n  \t\t// difference between the new and current centers in pixels\r\n  \t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n  \t\t// don't animate too far unless animate: true specified in options\r\n  \t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n  \t\tthis.panBy(offset, options);\r\n\r\n  \t\treturn true;\r\n  \t},\r\n\r\n  \t_createAnimProxy: function () {\r\n\r\n  \t\tvar proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated');\r\n  \t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n  \t\tthis.on('zoomanim', function (e) {\r\n  \t\t\tvar prop = TRANSFORM,\r\n  \t\t\t    transform = this._proxy.style[prop];\r\n\r\n  \t\t\tsetTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n  \t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n  \t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n  \t\t\t\tthis._onZoomTransitionEnd();\r\n  \t\t\t}\r\n  \t\t}, this);\r\n\r\n  \t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n  \t\tthis._on('unload', this._destroyAnimProxy, this);\r\n  \t},\r\n\r\n  \t_destroyAnimProxy: function () {\r\n  \t\tremove(this._proxy);\r\n  \t\tthis.off('load moveend', this._animMoveEnd, this);\r\n  \t\tdelete this._proxy;\r\n  \t},\r\n\r\n  \t_animMoveEnd: function () {\r\n  \t\tvar c = this.getCenter(),\r\n  \t\t    z = this.getZoom();\r\n  \t\tsetTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n  \t},\r\n\r\n  \t_catchTransitionEnd: function (e) {\r\n  \t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n  \t\t\tthis._onZoomTransitionEnd();\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_nothingToAnimate: function () {\r\n  \t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n  \t},\r\n\r\n  \t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n  \t\tif (this._animatingZoom) { return true; }\r\n\r\n  \t\toptions = options || {};\r\n\r\n  \t\t// don't animate if disabled, not supported or zoom difference is too large\r\n  \t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n  \t\t        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n  \t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n  \t\tvar scale = this.getZoomScale(zoom),\r\n  \t\t    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n  \t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n  \t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n  \t\trequestAnimFrame(function () {\r\n  \t\t\tthis\r\n  \t\t\t    ._moveStart(true, false)\r\n  \t\t\t    ._animateZoom(center, zoom, true);\r\n  \t\t}, this);\r\n\r\n  \t\treturn true;\r\n  \t},\r\n\r\n  \t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n  \t\tif (!this._mapPane) { return; }\r\n\r\n  \t\tif (startAnim) {\r\n  \t\t\tthis._animatingZoom = true;\r\n\r\n  \t\t\t// remember what center/zoom to set after animation\r\n  \t\t\tthis._animateToCenter = center;\r\n  \t\t\tthis._animateToZoom = zoom;\r\n\r\n  \t\t\taddClass(this._mapPane, 'leaflet-zoom-anim');\r\n  \t\t}\r\n\r\n  \t\t// @section Other Events\r\n  \t\t// @event zoomanim: ZoomAnimEvent\r\n  \t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n  \t\tthis.fire('zoomanim', {\r\n  \t\t\tcenter: center,\r\n  \t\t\tzoom: zoom,\r\n  \t\t\tnoUpdate: noUpdate\r\n  \t\t});\r\n\r\n  \t\tif (!this._tempFireZoomEvent) {\r\n  \t\t\tthis._tempFireZoomEvent = this._zoom !== this._animateToZoom;\r\n  \t\t}\r\n\r\n  \t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n  \t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n  \t\tsetTimeout(bind(this._onZoomTransitionEnd, this), 250);\r\n  \t},\r\n\r\n  \t_onZoomTransitionEnd: function () {\r\n  \t\tif (!this._animatingZoom) { return; }\r\n\r\n  \t\tif (this._mapPane) {\r\n  \t\t\tremoveClass(this._mapPane, 'leaflet-zoom-anim');\r\n  \t\t}\r\n\r\n  \t\tthis._animatingZoom = false;\r\n\r\n  \t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n  \t\tif (this._tempFireZoomEvent) {\r\n  \t\t\tthis.fire('zoom');\r\n  \t\t}\r\n  \t\tdelete this._tempFireZoomEvent;\r\n\r\n  \t\tthis.fire('move');\r\n\r\n  \t\tthis._moveEnd(true);\r\n  \t}\r\n  });\r\n\r\n  // @section\r\n\r\n  // @factory L.map(id: String, options?: Map options)\r\n  // Instantiates a map object given the DOM ID of a `<div>` element\r\n  // and optionally an object literal with `Map options`.\r\n  //\r\n  // @alternative\r\n  // @factory L.map(el: HTMLElement, options?: Map options)\r\n  // Instantiates a map object given an instance of a `<div>` HTML element\r\n  // and optionally an object literal with `Map options`.\r\n  function createMap(id, options) {\r\n  \treturn new Map(id, options);\r\n  }\n\n  /*\r\n   * @class Control\r\n   * @aka L.Control\r\n   * @inherits Class\r\n   *\r\n   * L.Control is a base class for implementing map controls. Handles positioning.\r\n   * All other controls extend from this class.\r\n   */\r\n\r\n  var Control = Class.extend({\r\n  \t// @section\r\n  \t// @aka Control Options\r\n  \toptions: {\r\n  \t\t// @option position: String = 'topright'\r\n  \t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n  \t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n  \t\tposition: 'topright'\r\n  \t},\r\n\r\n  \tinitialize: function (options) {\r\n  \t\tsetOptions(this, options);\r\n  \t},\r\n\r\n  \t/* @section\r\n  \t * Classes extending L.Control will inherit the following methods:\r\n  \t *\r\n  \t * @method getPosition: string\r\n  \t * Returns the position of the control.\r\n  \t */\r\n  \tgetPosition: function () {\r\n  \t\treturn this.options.position;\r\n  \t},\r\n\r\n  \t// @method setPosition(position: string): this\r\n  \t// Sets the position of the control.\r\n  \tsetPosition: function (position) {\r\n  \t\tvar map = this._map;\r\n\r\n  \t\tif (map) {\r\n  \t\t\tmap.removeControl(this);\r\n  \t\t}\r\n\r\n  \t\tthis.options.position = position;\r\n\r\n  \t\tif (map) {\r\n  \t\t\tmap.addControl(this);\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method getContainer: HTMLElement\r\n  \t// Returns the HTMLElement that contains the control.\r\n  \tgetContainer: function () {\r\n  \t\treturn this._container;\r\n  \t},\r\n\r\n  \t// @method addTo(map: Map): this\r\n  \t// Adds the control to the given map.\r\n  \taddTo: function (map) {\r\n  \t\tthis.remove();\r\n  \t\tthis._map = map;\r\n\r\n  \t\tvar container = this._container = this.onAdd(map),\r\n  \t\t    pos = this.getPosition(),\r\n  \t\t    corner = map._controlCorners[pos];\r\n\r\n  \t\taddClass(container, 'leaflet-control');\r\n\r\n  \t\tif (pos.indexOf('bottom') !== -1) {\r\n  \t\t\tcorner.insertBefore(container, corner.firstChild);\r\n  \t\t} else {\r\n  \t\t\tcorner.appendChild(container);\r\n  \t\t}\r\n\r\n  \t\tthis._map.on('unload', this.remove, this);\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method remove: this\r\n  \t// Removes the control from the map it is currently active on.\r\n  \tremove: function () {\r\n  \t\tif (!this._map) {\r\n  \t\t\treturn this;\r\n  \t\t}\r\n\r\n  \t\tremove(this._container);\r\n\r\n  \t\tif (this.onRemove) {\r\n  \t\t\tthis.onRemove(this._map);\r\n  \t\t}\r\n\r\n  \t\tthis._map.off('unload', this.remove, this);\r\n  \t\tthis._map = null;\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_refocusOnMap: function (e) {\r\n  \t\t// if map exists and event is not a keyboard event\r\n  \t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n  \t\t\tthis._map.getContainer().focus();\r\n  \t\t}\r\n  \t}\r\n  });\r\n\r\n  var control = function (options) {\r\n  \treturn new Control(options);\r\n  };\r\n\r\n  /* @section Extension methods\r\n   * @uninheritable\r\n   *\r\n   * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n   *\r\n   * @method onAdd(map: Map): HTMLElement\r\n   * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n   *\r\n   * @method onRemove(map: Map)\r\n   * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n   */\r\n\r\n  /* @namespace Map\r\n   * @section Methods for Layers and Controls\r\n   */\r\n  Map.include({\r\n  \t// @method addControl(control: Control): this\r\n  \t// Adds the given control to the map\r\n  \taddControl: function (control) {\r\n  \t\tcontrol.addTo(this);\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method removeControl(control: Control): this\r\n  \t// Removes the given control from the map\r\n  \tremoveControl: function (control) {\r\n  \t\tcontrol.remove();\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_initControlPos: function () {\r\n  \t\tvar corners = this._controlCorners = {},\r\n  \t\t    l = 'leaflet-',\r\n  \t\t    container = this._controlContainer =\r\n  \t\t            create$1('div', l + 'control-container', this._container);\r\n\r\n  \t\tfunction createCorner(vSide, hSide) {\r\n  \t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n  \t\t\tcorners[vSide + hSide] = create$1('div', className, container);\r\n  \t\t}\r\n\r\n  \t\tcreateCorner('top', 'left');\r\n  \t\tcreateCorner('top', 'right');\r\n  \t\tcreateCorner('bottom', 'left');\r\n  \t\tcreateCorner('bottom', 'right');\r\n  \t},\r\n\r\n  \t_clearControlPos: function () {\r\n  \t\tfor (var i in this._controlCorners) {\r\n  \t\t\tremove(this._controlCorners[i]);\r\n  \t\t}\r\n  \t\tremove(this._controlContainer);\r\n  \t\tdelete this._controlCorners;\r\n  \t\tdelete this._controlContainer;\r\n  \t}\r\n  });\n\n  /*\r\n   * @class Control.Layers\r\n   * @aka L.Control.Layers\r\n   * @inherits Control\r\n   *\r\n   * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var baseLayers = {\r\n   * \t\"Mapbox\": mapbox,\r\n   * \t\"OpenStreetMap\": osm\r\n   * };\r\n   *\r\n   * var overlays = {\r\n   * \t\"Marker\": marker,\r\n   * \t\"Roads\": roadsLayer\r\n   * };\r\n   *\r\n   * L.control.layers(baseLayers, overlays).addTo(map);\r\n   * ```\r\n   *\r\n   * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n   *\r\n   * ```js\r\n   * {\r\n   *     \"<someName1>\": layer1,\r\n   *     \"<someName2>\": layer2\r\n   * }\r\n   * ```\r\n   *\r\n   * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n   *\r\n   * ```js\r\n   * {\"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\": myLayer}\r\n   * ```\r\n   */\r\n\r\n  var Layers = Control.extend({\r\n  \t// @section\r\n  \t// @aka Control.Layers options\r\n  \toptions: {\r\n  \t\t// @option collapsed: Boolean = true\r\n  \t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.\r\n  \t\tcollapsed: true,\r\n  \t\tposition: 'topright',\r\n\r\n  \t\t// @option autoZIndex: Boolean = true\r\n  \t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n  \t\tautoZIndex: true,\r\n\r\n  \t\t// @option hideSingleBase: Boolean = false\r\n  \t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n  \t\thideSingleBase: false,\r\n\r\n  \t\t// @option sortLayers: Boolean = false\r\n  \t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n  \t\t// in which they were added to the control.\r\n  \t\tsortLayers: false,\r\n\r\n  \t\t// @option sortFunction: Function = *\r\n  \t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n  \t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n  \t\t// The function receives both the `L.Layer` instances and their names, as in\r\n  \t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n  \t\t// By default, it sorts layers alphabetically by their name.\r\n  \t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n  \t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n  \t\t}\r\n  \t},\r\n\r\n  \tinitialize: function (baseLayers, overlays, options) {\r\n  \t\tsetOptions(this, options);\r\n\r\n  \t\tthis._layerControlInputs = [];\r\n  \t\tthis._layers = [];\r\n  \t\tthis._lastZIndex = 0;\r\n  \t\tthis._handlingClick = false;\r\n\r\n  \t\tfor (var i in baseLayers) {\r\n  \t\t\tthis._addLayer(baseLayers[i], i);\r\n  \t\t}\r\n\r\n  \t\tfor (i in overlays) {\r\n  \t\t\tthis._addLayer(overlays[i], i, true);\r\n  \t\t}\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n  \t\tthis._initLayout();\r\n  \t\tthis._update();\r\n\r\n  \t\tthis._map = map;\r\n  \t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n  \t\tfor (var i = 0; i < this._layers.length; i++) {\r\n  \t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n  \t\t}\r\n\r\n  \t\treturn this._container;\r\n  \t},\r\n\r\n  \taddTo: function (map) {\r\n  \t\tControl.prototype.addTo.call(this, map);\r\n  \t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n  \t\treturn this._expandIfNotCollapsed();\r\n  \t},\r\n\r\n  \tonRemove: function () {\r\n  \t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n  \t\tfor (var i = 0; i < this._layers.length; i++) {\r\n  \t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method addBaseLayer(layer: Layer, name: String): this\r\n  \t// Adds a base layer (radio button entry) with the given name to the control.\r\n  \taddBaseLayer: function (layer, name) {\r\n  \t\tthis._addLayer(layer, name);\r\n  \t\treturn (this._map) ? this._update() : this;\r\n  \t},\r\n\r\n  \t// @method addOverlay(layer: Layer, name: String): this\r\n  \t// Adds an overlay (checkbox entry) with the given name to the control.\r\n  \taddOverlay: function (layer, name) {\r\n  \t\tthis._addLayer(layer, name, true);\r\n  \t\treturn (this._map) ? this._update() : this;\r\n  \t},\r\n\r\n  \t// @method removeLayer(layer: Layer): this\r\n  \t// Remove the given layer from the control.\r\n  \tremoveLayer: function (layer) {\r\n  \t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n  \t\tvar obj = this._getLayer(stamp(layer));\r\n  \t\tif (obj) {\r\n  \t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n  \t\t}\r\n  \t\treturn (this._map) ? this._update() : this;\r\n  \t},\r\n\r\n  \t// @method expand(): this\r\n  \t// Expand the control container if collapsed.\r\n  \texpand: function () {\r\n  \t\taddClass(this._container, 'leaflet-control-layers-expanded');\r\n  \t\tthis._section.style.height = null;\r\n  \t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n  \t\tif (acceptableHeight < this._section.clientHeight) {\r\n  \t\t\taddClass(this._section, 'leaflet-control-layers-scrollbar');\r\n  \t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n  \t\t} else {\r\n  \t\t\tremoveClass(this._section, 'leaflet-control-layers-scrollbar');\r\n  \t\t}\r\n  \t\tthis._checkDisabledLayers();\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method collapse(): this\r\n  \t// Collapse the control container if expanded.\r\n  \tcollapse: function () {\r\n  \t\tremoveClass(this._container, 'leaflet-control-layers-expanded');\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_initLayout: function () {\r\n  \t\tvar className = 'leaflet-control-layers',\r\n  \t\t    container = this._container = create$1('div', className),\r\n  \t\t    collapsed = this.options.collapsed;\r\n\r\n  \t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n  \t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n  \t\tdisableClickPropagation(container);\r\n  \t\tdisableScrollPropagation(container);\r\n\r\n  \t\tvar section = this._section = create$1('section', className + '-list');\r\n\r\n  \t\tif (collapsed) {\r\n  \t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n  \t\t\ton(container, {\r\n  \t\t\t\tmouseenter: function () {\r\n  \t\t\t\t\ton(section, 'click', preventDefault);\r\n  \t\t\t\t\tthis.expand();\r\n  \t\t\t\t\tsetTimeout(function () {\r\n  \t\t\t\t\t\toff(section, 'click', preventDefault);\r\n  \t\t\t\t\t});\r\n  \t\t\t\t},\r\n  \t\t\t\tmouseleave: this.collapse\r\n  \t\t\t}, this);\r\n  \t\t}\r\n\r\n  \t\tvar link = this._layersLink = create$1('a', className + '-toggle', container);\r\n  \t\tlink.href = '#';\r\n  \t\tlink.title = 'Layers';\r\n  \t\tlink.setAttribute('role', 'button');\r\n\r\n  \t\ton(link, 'click', preventDefault); // prevent link function\r\n  \t\ton(link, 'focus', this.expand, this);\r\n\r\n  \t\tif (!collapsed) {\r\n  \t\t\tthis.expand();\r\n  \t\t}\r\n\r\n  \t\tthis._baseLayersList = create$1('div', className + '-base', section);\r\n  \t\tthis._separator = create$1('div', className + '-separator', section);\r\n  \t\tthis._overlaysList = create$1('div', className + '-overlays', section);\r\n\r\n  \t\tcontainer.appendChild(section);\r\n  \t},\r\n\r\n  \t_getLayer: function (id) {\r\n  \t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n  \t\t\tif (this._layers[i] && stamp(this._layers[i].layer) === id) {\r\n  \t\t\t\treturn this._layers[i];\r\n  \t\t\t}\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_addLayer: function (layer, name, overlay) {\r\n  \t\tif (this._map) {\r\n  \t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n  \t\t}\r\n\r\n  \t\tthis._layers.push({\r\n  \t\t\tlayer: layer,\r\n  \t\t\tname: name,\r\n  \t\t\toverlay: overlay\r\n  \t\t});\r\n\r\n  \t\tif (this.options.sortLayers) {\r\n  \t\t\tthis._layers.sort(bind(function (a, b) {\r\n  \t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n  \t\t\t}, this));\r\n  \t\t}\r\n\r\n  \t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n  \t\t\tthis._lastZIndex++;\r\n  \t\t\tlayer.setZIndex(this._lastZIndex);\r\n  \t\t}\r\n\r\n  \t\tthis._expandIfNotCollapsed();\r\n  \t},\r\n\r\n  \t_update: function () {\r\n  \t\tif (!this._container) { return this; }\r\n\r\n  \t\tempty(this._baseLayersList);\r\n  \t\tempty(this._overlaysList);\r\n\r\n  \t\tthis._layerControlInputs = [];\r\n  \t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n  \t\tfor (i = 0; i < this._layers.length; i++) {\r\n  \t\t\tobj = this._layers[i];\r\n  \t\t\tthis._addItem(obj);\r\n  \t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n  \t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n  \t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n  \t\t}\r\n\r\n  \t\t// Hide base layers section if there's only one layer.\r\n  \t\tif (this.options.hideSingleBase) {\r\n  \t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n  \t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n  \t\t}\r\n\r\n  \t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_onLayerChange: function (e) {\r\n  \t\tif (!this._handlingClick) {\r\n  \t\t\tthis._update();\r\n  \t\t}\r\n\r\n  \t\tvar obj = this._getLayer(stamp(e.target));\r\n\r\n  \t\t// @namespace Map\r\n  \t\t// @section Layer events\r\n  \t\t// @event baselayerchange: LayersControlEvent\r\n  \t\t// Fired when the base layer is changed through the [layers control](#control-layers).\r\n  \t\t// @event overlayadd: LayersControlEvent\r\n  \t\t// Fired when an overlay is selected through the [layers control](#control-layers).\r\n  \t\t// @event overlayremove: LayersControlEvent\r\n  \t\t// Fired when an overlay is deselected through the [layers control](#control-layers).\r\n  \t\t// @namespace Control.Layers\r\n  \t\tvar type = obj.overlay ?\r\n  \t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n  \t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n  \t\tif (type) {\r\n  \t\t\tthis._map.fire(type, obj);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)\r\n  \t_createRadioElement: function (name, checked) {\r\n\r\n  \t\tvar radioHtml = '<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"' +\r\n  \t\t\t\tname + '\"' + (checked ? ' checked=\"checked\"' : '') + '/>';\r\n\r\n  \t\tvar radioFragment = document.createElement('div');\r\n  \t\tradioFragment.innerHTML = radioHtml;\r\n\r\n  \t\treturn radioFragment.firstChild;\r\n  \t},\r\n\r\n  \t_addItem: function (obj) {\r\n  \t\tvar label = document.createElement('label'),\r\n  \t\t    checked = this._map.hasLayer(obj.layer),\r\n  \t\t    input;\r\n\r\n  \t\tif (obj.overlay) {\r\n  \t\t\tinput = document.createElement('input');\r\n  \t\t\tinput.type = 'checkbox';\r\n  \t\t\tinput.className = 'leaflet-control-layers-selector';\r\n  \t\t\tinput.defaultChecked = checked;\r\n  \t\t} else {\r\n  \t\t\tinput = this._createRadioElement('leaflet-base-layers_' + stamp(this), checked);\r\n  \t\t}\r\n\r\n  \t\tthis._layerControlInputs.push(input);\r\n  \t\tinput.layerId = stamp(obj.layer);\r\n\r\n  \t\ton(input, 'click', this._onInputClick, this);\r\n\r\n  \t\tvar name = document.createElement('span');\r\n  \t\tname.innerHTML = ' ' + obj.name;\r\n\r\n  \t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n  \t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n  \t\tvar holder = document.createElement('span');\r\n\r\n  \t\tlabel.appendChild(holder);\r\n  \t\tholder.appendChild(input);\r\n  \t\tholder.appendChild(name);\r\n\r\n  \t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n  \t\tcontainer.appendChild(label);\r\n\r\n  \t\tthis._checkDisabledLayers();\r\n  \t\treturn label;\r\n  \t},\r\n\r\n  \t_onInputClick: function () {\r\n  \t\tvar inputs = this._layerControlInputs,\r\n  \t\t    input, layer;\r\n  \t\tvar addedLayers = [],\r\n  \t\t    removedLayers = [];\r\n\r\n  \t\tthis._handlingClick = true;\r\n\r\n  \t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n  \t\t\tinput = inputs[i];\r\n  \t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n  \t\t\tif (input.checked) {\r\n  \t\t\t\taddedLayers.push(layer);\r\n  \t\t\t} else if (!input.checked) {\r\n  \t\t\t\tremovedLayers.push(layer);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n  \t\tfor (i = 0; i < removedLayers.length; i++) {\r\n  \t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n  \t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t\tfor (i = 0; i < addedLayers.length; i++) {\r\n  \t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n  \t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\tthis._handlingClick = false;\r\n\r\n  \t\tthis._refocusOnMap();\r\n  \t},\r\n\r\n  \t_checkDisabledLayers: function () {\r\n  \t\tvar inputs = this._layerControlInputs,\r\n  \t\t    input,\r\n  \t\t    layer,\r\n  \t\t    zoom = this._map.getZoom();\r\n\r\n  \t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n  \t\t\tinput = inputs[i];\r\n  \t\t\tlayer = this._getLayer(input.layerId).layer;\r\n  \t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n  \t\t\t                 (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_expandIfNotCollapsed: function () {\r\n  \t\tif (this._map && !this.options.collapsed) {\r\n  \t\t\tthis.expand();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t}\r\n\r\n  });\r\n\r\n\r\n  // @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n  // Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\n  var layers = function (baseLayers, overlays, options) {\r\n  \treturn new Layers(baseLayers, overlays, options);\r\n  };\n\n  /*\r\n   * @class Control.Zoom\r\n   * @aka L.Control.Zoom\r\n   * @inherits Control\r\n   *\r\n   * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n   */\r\n\r\n  var Zoom = Control.extend({\r\n  \t// @section\r\n  \t// @aka Control.Zoom options\r\n  \toptions: {\r\n  \t\tposition: 'topleft',\r\n\r\n  \t\t// @option zoomInText: String = '<span aria-hidden=\"true\">+</span>'\r\n  \t\t// The text set on the 'zoom in' button.\r\n  \t\tzoomInText: '<span aria-hidden=\"true\">+</span>',\r\n\r\n  \t\t// @option zoomInTitle: String = 'Zoom in'\r\n  \t\t// The title set on the 'zoom in' button.\r\n  \t\tzoomInTitle: 'Zoom in',\r\n\r\n  \t\t// @option zoomOutText: String = '<span aria-hidden=\"true\">&#x2212;</span>'\r\n  \t\t// The text set on the 'zoom out' button.\r\n  \t\tzoomOutText: '<span aria-hidden=\"true\">&#x2212;</span>',\r\n\r\n  \t\t// @option zoomOutTitle: String = 'Zoom out'\r\n  \t\t// The title set on the 'zoom out' button.\r\n  \t\tzoomOutTitle: 'Zoom out'\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n  \t\tvar zoomName = 'leaflet-control-zoom',\r\n  \t\t    container = create$1('div', zoomName + ' leaflet-bar'),\r\n  \t\t    options = this.options;\r\n\r\n  \t\tthis._zoomInButton  = this._createButton(options.zoomInText, options.zoomInTitle,\r\n  \t\t        zoomName + '-in',  container, this._zoomIn);\r\n  \t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n  \t\t        zoomName + '-out', container, this._zoomOut);\r\n\r\n  \t\tthis._updateDisabled();\r\n  \t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n  \t\treturn container;\r\n  \t},\r\n\r\n  \tonRemove: function (map) {\r\n  \t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n  \t},\r\n\r\n  \tdisable: function () {\r\n  \t\tthis._disabled = true;\r\n  \t\tthis._updateDisabled();\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \tenable: function () {\r\n  \t\tthis._disabled = false;\r\n  \t\tthis._updateDisabled();\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_zoomIn: function (e) {\r\n  \t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n  \t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_zoomOut: function (e) {\r\n  \t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n  \t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_createButton: function (html, title, className, container, fn) {\r\n  \t\tvar link = create$1('a', className, container);\r\n  \t\tlink.innerHTML = html;\r\n  \t\tlink.href = '#';\r\n  \t\tlink.title = title;\r\n\r\n  \t\t/*\r\n  \t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n  \t\t */\r\n  \t\tlink.setAttribute('role', 'button');\r\n  \t\tlink.setAttribute('aria-label', title);\r\n\r\n  \t\tdisableClickPropagation(link);\r\n  \t\ton(link, 'click', stop);\r\n  \t\ton(link, 'click', fn, this);\r\n  \t\ton(link, 'click', this._refocusOnMap, this);\r\n\r\n  \t\treturn link;\r\n  \t},\r\n\r\n  \t_updateDisabled: function () {\r\n  \t\tvar map = this._map,\r\n  \t\t    className = 'leaflet-disabled';\r\n\r\n  \t\tremoveClass(this._zoomInButton, className);\r\n  \t\tremoveClass(this._zoomOutButton, className);\r\n  \t\tthis._zoomInButton.setAttribute('aria-disabled', 'false');\r\n  \t\tthis._zoomOutButton.setAttribute('aria-disabled', 'false');\r\n\r\n  \t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n  \t\t\taddClass(this._zoomOutButton, className);\r\n  \t\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'true');\r\n  \t\t}\r\n  \t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n  \t\t\taddClass(this._zoomInButton, className);\r\n  \t\t\tthis._zoomInButton.setAttribute('aria-disabled', 'true');\r\n  \t\t}\r\n  \t}\r\n  });\r\n\r\n  // @namespace Map\r\n  // @section Control options\r\n  // @option zoomControl: Boolean = true\r\n  // Whether a [zoom control](#control-zoom) is added to the map by default.\r\n  Map.mergeOptions({\r\n  \tzoomControl: true\r\n  });\r\n\r\n  Map.addInitHook(function () {\r\n  \tif (this.options.zoomControl) {\r\n  \t\t// @section Controls\r\n  \t\t// @property zoomControl: Control.Zoom\r\n  \t\t// The default zoom control (only available if the\r\n  \t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n  \t\tthis.zoomControl = new Zoom();\r\n  \t\tthis.addControl(this.zoomControl);\r\n  \t}\r\n  });\r\n\r\n  // @namespace Control.Zoom\r\n  // @factory L.control.zoom(options: Control.Zoom options)\r\n  // Creates a zoom control\r\n  var zoom = function (options) {\r\n  \treturn new Zoom(options);\r\n  };\n\n  /*\n   * @class Control.Scale\n   * @aka L.Control.Scale\n   * @inherits Control\n   *\n   * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n   *\n   * @example\n   *\n   * ```js\n   * L.control.scale().addTo(map);\n   * ```\n   */\n\n  var Scale = Control.extend({\n  \t// @section\n  \t// @aka Control.Scale options\n  \toptions: {\n  \t\tposition: 'bottomleft',\n\n  \t\t// @option maxWidth: Number = 100\n  \t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n  \t\tmaxWidth: 100,\n\n  \t\t// @option metric: Boolean = True\n  \t\t// Whether to show the metric scale line (m/km).\n  \t\tmetric: true,\n\n  \t\t// @option imperial: Boolean = True\n  \t\t// Whether to show the imperial scale line (mi/ft).\n  \t\timperial: true\n\n  \t\t// @option updateWhenIdle: Boolean = false\n  \t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n  \t},\n\n  \tonAdd: function (map) {\n  \t\tvar className = 'leaflet-control-scale',\n  \t\t    container = create$1('div', className),\n  \t\t    options = this.options;\n\n  \t\tthis._addScales(options, className + '-line', container);\n\n  \t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n  \t\tmap.whenReady(this._update, this);\n\n  \t\treturn container;\n  \t},\n\n  \tonRemove: function (map) {\n  \t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n  \t},\n\n  \t_addScales: function (options, className, container) {\n  \t\tif (options.metric) {\n  \t\t\tthis._mScale = create$1('div', className, container);\n  \t\t}\n  \t\tif (options.imperial) {\n  \t\t\tthis._iScale = create$1('div', className, container);\n  \t\t}\n  \t},\n\n  \t_update: function () {\n  \t\tvar map = this._map,\n  \t\t    y = map.getSize().y / 2;\n\n  \t\tvar maxMeters = map.distance(\n  \t\t\tmap.containerPointToLatLng([0, y]),\n  \t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n  \t\tthis._updateScales(maxMeters);\n  \t},\n\n  \t_updateScales: function (maxMeters) {\n  \t\tif (this.options.metric && maxMeters) {\n  \t\t\tthis._updateMetric(maxMeters);\n  \t\t}\n  \t\tif (this.options.imperial && maxMeters) {\n  \t\t\tthis._updateImperial(maxMeters);\n  \t\t}\n  \t},\n\n  \t_updateMetric: function (maxMeters) {\n  \t\tvar meters = this._getRoundNum(maxMeters),\n  \t\t    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n  \t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n  \t},\n\n  \t_updateImperial: function (maxMeters) {\n  \t\tvar maxFeet = maxMeters * 3.2808399,\n  \t\t    maxMiles, miles, feet;\n\n  \t\tif (maxFeet > 5280) {\n  \t\t\tmaxMiles = maxFeet / 5280;\n  \t\t\tmiles = this._getRoundNum(maxMiles);\n  \t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n  \t\t} else {\n  \t\t\tfeet = this._getRoundNum(maxFeet);\n  \t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n  \t\t}\n  \t},\n\n  \t_updateScale: function (scale, text, ratio) {\n  \t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n  \t\tscale.innerHTML = text;\n  \t},\n\n  \t_getRoundNum: function (num) {\n  \t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n  \t\t    d = num / pow10;\n\n  \t\td = d >= 10 ? 10 :\n  \t\t    d >= 5 ? 5 :\n  \t\t    d >= 3 ? 3 :\n  \t\t    d >= 2 ? 2 : 1;\n\n  \t\treturn pow10 * d;\n  \t}\n  });\n\n\n  // @factory L.control.scale(options?: Control.Scale options)\n  // Creates an scale control with the given options.\n  var scale = function (options) {\n  \treturn new Scale(options);\n  };\n\n  var ukrainianFlag = '<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" class=\"leaflet-attribution-flag\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg>';\r\n\r\n\r\n  /*\r\n   * @class Control.Attribution\r\n   * @aka L.Control.Attribution\r\n   * @inherits Control\r\n   *\r\n   * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n   */\r\n\r\n  var Attribution = Control.extend({\r\n  \t// @section\r\n  \t// @aka Control.Attribution options\r\n  \toptions: {\r\n  \t\tposition: 'bottomright',\r\n\r\n  \t\t// @option prefix: String|false = 'Leaflet'\r\n  \t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n  \t\tprefix: '<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'\r\n  \t},\r\n\r\n  \tinitialize: function (options) {\r\n  \t\tsetOptions(this, options);\r\n\r\n  \t\tthis._attributions = {};\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n  \t\tmap.attributionControl = this;\r\n  \t\tthis._container = create$1('div', 'leaflet-control-attribution');\r\n  \t\tdisableClickPropagation(this._container);\r\n\r\n  \t\t// TODO ugly, refactor\r\n  \t\tfor (var i in map._layers) {\r\n  \t\t\tif (map._layers[i].getAttribution) {\r\n  \t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\tthis._update();\r\n\r\n  \t\tmap.on('layeradd', this._addAttribution, this);\r\n\r\n  \t\treturn this._container;\r\n  \t},\r\n\r\n  \tonRemove: function (map) {\r\n  \t\tmap.off('layeradd', this._addAttribution, this);\r\n  \t},\r\n\r\n  \t_addAttribution: function (ev) {\r\n  \t\tif (ev.layer.getAttribution) {\r\n  \t\t\tthis.addAttribution(ev.layer.getAttribution());\r\n  \t\t\tev.layer.once('remove', function () {\r\n  \t\t\t\tthis.removeAttribution(ev.layer.getAttribution());\r\n  \t\t\t}, this);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method setPrefix(prefix: String|false): this\r\n  \t// The HTML text shown before the attributions. Pass `false` to disable.\r\n  \tsetPrefix: function (prefix) {\r\n  \t\tthis.options.prefix = prefix;\r\n  \t\tthis._update();\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method addAttribution(text: String): this\r\n  \t// Adds an attribution text (e.g. `'&copy; OpenStreetMap contributors'`).\r\n  \taddAttribution: function (text) {\r\n  \t\tif (!text) { return this; }\r\n\r\n  \t\tif (!this._attributions[text]) {\r\n  \t\t\tthis._attributions[text] = 0;\r\n  \t\t}\r\n  \t\tthis._attributions[text]++;\r\n\r\n  \t\tthis._update();\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method removeAttribution(text: String): this\r\n  \t// Removes an attribution text.\r\n  \tremoveAttribution: function (text) {\r\n  \t\tif (!text) { return this; }\r\n\r\n  \t\tif (this._attributions[text]) {\r\n  \t\t\tthis._attributions[text]--;\r\n  \t\t\tthis._update();\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_update: function () {\r\n  \t\tif (!this._map) { return; }\r\n\r\n  \t\tvar attribs = [];\r\n\r\n  \t\tfor (var i in this._attributions) {\r\n  \t\t\tif (this._attributions[i]) {\r\n  \t\t\t\tattribs.push(i);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\tvar prefixAndAttribs = [];\r\n\r\n  \t\tif (this.options.prefix) {\r\n  \t\t\tprefixAndAttribs.push(this.options.prefix);\r\n  \t\t}\r\n  \t\tif (attribs.length) {\r\n  \t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n  \t\t}\r\n\r\n  \t\tthis._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden=\"true\">|</span> ');\r\n  \t}\r\n  });\r\n\r\n  // @namespace Map\r\n  // @section Control options\r\n  // @option attributionControl: Boolean = true\r\n  // Whether a [attribution control](#control-attribution) is added to the map by default.\r\n  Map.mergeOptions({\r\n  \tattributionControl: true\r\n  });\r\n\r\n  Map.addInitHook(function () {\r\n  \tif (this.options.attributionControl) {\r\n  \t\tnew Attribution().addTo(this);\r\n  \t}\r\n  });\r\n\r\n  // @namespace Control.Attribution\r\n  // @factory L.control.attribution(options: Control.Attribution options)\r\n  // Creates an attribution control.\r\n  var attribution = function (options) {\r\n  \treturn new Attribution(options);\r\n  };\n\n  Control.Layers = Layers;\n  Control.Zoom = Zoom;\n  Control.Scale = Scale;\n  Control.Attribution = Attribution;\n\n  control.layers = layers;\n  control.zoom = zoom;\n  control.scale = scale;\n  control.attribution = attribution;\n\n  /*\n  \tL.Handler is a base class for handler classes that are used internally to inject\n  \tinteraction features like dragging to classes like Map and Marker.\n  */\n\n  // @class Handler\n  // @aka L.Handler\n  // Abstract class for map interaction handlers\n\n  var Handler = Class.extend({\n  \tinitialize: function (map) {\n  \t\tthis._map = map;\n  \t},\n\n  \t// @method enable(): this\n  \t// Enables the handler\n  \tenable: function () {\n  \t\tif (this._enabled) { return this; }\n\n  \t\tthis._enabled = true;\n  \t\tthis.addHooks();\n  \t\treturn this;\n  \t},\n\n  \t// @method disable(): this\n  \t// Disables the handler\n  \tdisable: function () {\n  \t\tif (!this._enabled) { return this; }\n\n  \t\tthis._enabled = false;\n  \t\tthis.removeHooks();\n  \t\treturn this;\n  \t},\n\n  \t// @method enabled(): Boolean\n  \t// Returns `true` if the handler is enabled\n  \tenabled: function () {\n  \t\treturn !!this._enabled;\n  \t}\n\n  \t// @section Extension methods\n  \t// Classes inheriting from `Handler` must implement the two following methods:\n  \t// @method addHooks()\n  \t// Called when the handler is enabled, should add event hooks.\n  \t// @method removeHooks()\n  \t// Called when the handler is disabled, should remove the event hooks added previously.\n  });\n\n  // @section There is static function which can be called without instantiating L.Handler:\n  // @function addTo(map: Map, name: String): this\n  // Adds a new Handler to the given map with the given name.\n  Handler.addTo = function (map, name) {\n  \tmap.addHandler(name, this);\n  \treturn this;\n  };\n\n  var Mixin = {Events: Events};\n\n  /*\r\n   * @class Draggable\r\n   * @aka L.Draggable\r\n   * @inherits Evented\r\n   *\r\n   * A class for making DOM elements draggable (including touch support).\r\n   * Used internally for map and marker dragging. Only works for elements\r\n   * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n   *\r\n   * @example\r\n   * ```js\r\n   * var draggable = new L.Draggable(elementToDrag);\r\n   * draggable.enable();\r\n   * ```\r\n   */\r\n\r\n  var START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\n\r\n  var Draggable = Evented.extend({\r\n\r\n  \toptions: {\r\n  \t\t// @section\r\n  \t\t// @aka Draggable options\r\n  \t\t// @option clickTolerance: Number = 3\r\n  \t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n  \t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n  \t\tclickTolerance: 3\r\n  \t},\r\n\r\n  \t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n  \t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n  \tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n  \t\tsetOptions(this, options);\r\n\r\n  \t\tthis._element = element;\r\n  \t\tthis._dragStartTarget = dragStartTarget || element;\r\n  \t\tthis._preventOutline = preventOutline;\r\n  \t},\r\n\r\n  \t// @method enable()\r\n  \t// Enables the dragging ability\r\n  \tenable: function () {\r\n  \t\tif (this._enabled) { return; }\r\n\r\n  \t\ton(this._dragStartTarget, START, this._onDown, this);\r\n\r\n  \t\tthis._enabled = true;\r\n  \t},\r\n\r\n  \t// @method disable()\r\n  \t// Disables the dragging ability\r\n  \tdisable: function () {\r\n  \t\tif (!this._enabled) { return; }\r\n\r\n  \t\t// If we're currently dragging this draggable,\r\n  \t\t// disabling it counts as first ending the drag.\r\n  \t\tif (Draggable._dragging === this) {\r\n  \t\t\tthis.finishDrag(true);\r\n  \t\t}\r\n\r\n  \t\toff(this._dragStartTarget, START, this._onDown, this);\r\n\r\n  \t\tthis._enabled = false;\r\n  \t\tthis._moved = false;\r\n  \t},\r\n\r\n  \t_onDown: function (e) {\r\n  \t\t// Ignore the event if disabled; this happens in IE11\r\n  \t\t// under some circumstances, see #3666.\r\n  \t\tif (!this._enabled) { return; }\r\n\r\n  \t\tthis._moved = false;\r\n\r\n  \t\tif (hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n  \t\tif (e.touches && e.touches.length !== 1) {\r\n  \t\t\t// Finish dragging to avoid conflict with touchZoom\r\n  \t\t\tif (Draggable._dragging === this) {\r\n  \t\t\t\tthis.finishDrag();\r\n  \t\t\t}\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n  \t\tDraggable._dragging = this;  // Prevent dragging multiple objects at once.\r\n\r\n  \t\tif (this._preventOutline) {\r\n  \t\t\tpreventOutline(this._element);\r\n  \t\t}\r\n\r\n  \t\tdisableImageDrag();\r\n  \t\tdisableTextSelection();\r\n\r\n  \t\tif (this._moving) { return; }\r\n\r\n  \t\t// @event down: Event\r\n  \t\t// Fired when a drag is about to start.\r\n  \t\tthis.fire('down');\r\n\r\n  \t\tvar first = e.touches ? e.touches[0] : e,\r\n  \t\t    sizedParent = getSizedParentNode(this._element);\r\n\r\n  \t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n  \t\tthis._startPos = getPosition(this._element);\r\n\r\n  \t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n  \t\tthis._parentScale = getScale(sizedParent);\r\n\r\n  \t\tvar mouseevent = e.type === 'mousedown';\r\n  \t\ton(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);\r\n  \t\ton(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);\r\n  \t},\r\n\r\n  \t_onMove: function (e) {\r\n  \t\t// Ignore the event if disabled; this happens in IE11\r\n  \t\t// under some circumstances, see #3666.\r\n  \t\tif (!this._enabled) { return; }\r\n\r\n  \t\tif (e.touches && e.touches.length > 1) {\r\n  \t\t\tthis._moved = true;\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n  \t\t    offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n  \t\tif (!offset.x && !offset.y) { return; }\r\n  \t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n  \t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n  \t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n  \t\t// and we can use the cached value for the scale.\r\n  \t\toffset.x /= this._parentScale.x;\r\n  \t\toffset.y /= this._parentScale.y;\r\n\r\n  \t\tpreventDefault(e);\r\n\r\n  \t\tif (!this._moved) {\r\n  \t\t\t// @event dragstart: Event\r\n  \t\t\t// Fired when a drag starts\r\n  \t\t\tthis.fire('dragstart');\r\n\r\n  \t\t\tthis._moved = true;\r\n\r\n  \t\t\taddClass(document.body, 'leaflet-dragging');\r\n\r\n  \t\t\tthis._lastTarget = e.target || e.srcElement;\r\n  \t\t\t// IE and Edge do not give the <use> element, so fetch it\r\n  \t\t\t// if necessary\r\n  \t\t\tif (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\r\n  \t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n  \t\t\t}\r\n  \t\t\taddClass(this._lastTarget, 'leaflet-drag-target');\r\n  \t\t}\r\n\r\n  \t\tthis._newPos = this._startPos.add(offset);\r\n  \t\tthis._moving = true;\r\n\r\n  \t\tthis._lastEvent = e;\r\n  \t\tthis._updatePosition();\r\n  \t},\r\n\r\n  \t_updatePosition: function () {\r\n  \t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n  \t\t// @event predrag: Event\r\n  \t\t// Fired continuously during dragging *before* each corresponding\r\n  \t\t// update of the element's position.\r\n  \t\tthis.fire('predrag', e);\r\n  \t\tsetPosition(this._element, this._newPos);\r\n\r\n  \t\t// @event drag: Event\r\n  \t\t// Fired continuously during dragging.\r\n  \t\tthis.fire('drag', e);\r\n  \t},\r\n\r\n  \t_onUp: function () {\r\n  \t\t// Ignore the event if disabled; this happens in IE11\r\n  \t\t// under some circumstances, see #3666.\r\n  \t\tif (!this._enabled) { return; }\r\n  \t\tthis.finishDrag();\r\n  \t},\r\n\r\n  \tfinishDrag: function (noInertia) {\r\n  \t\tremoveClass(document.body, 'leaflet-dragging');\r\n\r\n  \t\tif (this._lastTarget) {\r\n  \t\t\tremoveClass(this._lastTarget, 'leaflet-drag-target');\r\n  \t\t\tthis._lastTarget = null;\r\n  \t\t}\r\n\r\n  \t\toff(document, 'mousemove touchmove', this._onMove, this);\r\n  \t\toff(document, 'mouseup touchend touchcancel', this._onUp, this);\r\n\r\n  \t\tenableImageDrag();\r\n  \t\tenableTextSelection();\r\n\r\n  \t\tif (this._moved && this._moving) {\r\n\r\n  \t\t\t// @event dragend: DragEndEvent\r\n  \t\t\t// Fired when the drag ends.\r\n  \t\t\tthis.fire('dragend', {\r\n  \t\t\t\tnoInertia: noInertia,\r\n  \t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n  \t\t\t});\r\n  \t\t}\r\n\r\n  \t\tthis._moving = false;\r\n  \t\tDraggable._dragging = false;\r\n  \t}\r\n\r\n  });\n\n  /*\r\n   * @namespace LineUtil\r\n   *\r\n   * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n   */\r\n\r\n  // Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n  // Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n  // @function simplify(points: Point[], tolerance: Number): Point[]\r\n  // Dramatically reduces the number of points in a polyline while retaining\r\n  // its shape and returns a new array of simplified points, using the\r\n  // [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).\r\n  // Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n  // each zoom level and also reducing visual noise. tolerance affects the amount of\r\n  // simplification (lesser value means higher quality but slower and with more points).\r\n  // Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).\r\n  function simplify(points, tolerance) {\r\n  \tif (!tolerance || !points.length) {\r\n  \t\treturn points.slice();\r\n  \t}\r\n\r\n  \tvar sqTolerance = tolerance * tolerance;\r\n\r\n  \t    // stage 1: vertex reduction\r\n  \t    points = _reducePoints(points, sqTolerance);\r\n\r\n  \t    // stage 2: Douglas-Peucker simplification\r\n  \t    points = _simplifyDP(points, sqTolerance);\r\n\r\n  \treturn points;\r\n  }\r\n\r\n  // @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n  // Returns the distance between point `p` and segment `p1` to `p2`.\r\n  function pointToSegmentDistance(p, p1, p2) {\r\n  \treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n  }\r\n\r\n  // @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n  // Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\n  function closestPointOnSegment(p, p1, p2) {\r\n  \treturn _sqClosestPointOnSegment(p, p1, p2);\r\n  }\r\n\r\n  // Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\r\n  function _simplifyDP(points, sqTolerance) {\r\n\r\n  \tvar len = points.length,\r\n  \t    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n  \t    markers = new ArrayConstructor(len);\r\n\r\n  \t    markers[0] = markers[len - 1] = 1;\r\n\r\n  \t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n  \tvar i,\r\n  \t    newPoints = [];\r\n\r\n  \tfor (i = 0; i < len; i++) {\r\n  \t\tif (markers[i]) {\r\n  \t\t\tnewPoints.push(points[i]);\r\n  \t\t}\r\n  \t}\r\n\r\n  \treturn newPoints;\r\n  }\r\n\r\n  function _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n  \tvar maxSqDist = 0,\r\n  \tindex, i, sqDist;\r\n\r\n  \tfor (i = first + 1; i <= last - 1; i++) {\r\n  \t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n  \t\tif (sqDist > maxSqDist) {\r\n  \t\t\tindex = i;\r\n  \t\t\tmaxSqDist = sqDist;\r\n  \t\t}\r\n  \t}\r\n\r\n  \tif (maxSqDist > sqTolerance) {\r\n  \t\tmarkers[index] = 1;\r\n\r\n  \t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n  \t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n  \t}\r\n  }\r\n\r\n  // reduce points that are too close to each other to a single point\r\n  function _reducePoints(points, sqTolerance) {\r\n  \tvar reducedPoints = [points[0]];\r\n\r\n  \tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n  \t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n  \t\t\treducedPoints.push(points[i]);\r\n  \t\t\tprev = i;\r\n  \t\t}\r\n  \t}\r\n  \tif (prev < len - 1) {\r\n  \t\treducedPoints.push(points[len - 1]);\r\n  \t}\r\n  \treturn reducedPoints;\r\n  }\r\n\r\n  var _lastCode;\r\n\r\n  // @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n  // Clips the segment a to b by rectangular bounds with the\r\n  // [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n  // (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n  // points that are on the screen or near, increasing performance.\r\n  function clipSegment(a, b, bounds, useLastCode, round) {\r\n  \tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n  \t    codeB = _getBitCode(b, bounds),\r\n\r\n  \t    codeOut, p, newCode;\r\n\r\n  \t    // save 2nd code to avoid calculating it on the next segment\r\n  \t    _lastCode = codeB;\r\n\r\n  \twhile (true) {\r\n  \t\t// if a,b is inside the clip window (trivial accept)\r\n  \t\tif (!(codeA | codeB)) {\r\n  \t\t\treturn [a, b];\r\n  \t\t}\r\n\r\n  \t\t// if a,b is outside the clip window (trivial reject)\r\n  \t\tif (codeA & codeB) {\r\n  \t\t\treturn false;\r\n  \t\t}\r\n\r\n  \t\t// other cases\r\n  \t\tcodeOut = codeA || codeB;\r\n  \t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n  \t\tnewCode = _getBitCode(p, bounds);\r\n\r\n  \t\tif (codeOut === codeA) {\r\n  \t\t\ta = p;\r\n  \t\t\tcodeA = newCode;\r\n  \t\t} else {\r\n  \t\t\tb = p;\r\n  \t\t\tcodeB = newCode;\r\n  \t\t}\r\n  \t}\r\n  }\r\n\r\n  function _getEdgeIntersection(a, b, code, bounds, round) {\r\n  \tvar dx = b.x - a.x,\r\n  \t    dy = b.y - a.y,\r\n  \t    min = bounds.min,\r\n  \t    max = bounds.max,\r\n  \t    x, y;\r\n\r\n  \tif (code & 8) { // top\r\n  \t\tx = a.x + dx * (max.y - a.y) / dy;\r\n  \t\ty = max.y;\r\n\r\n  \t} else if (code & 4) { // bottom\r\n  \t\tx = a.x + dx * (min.y - a.y) / dy;\r\n  \t\ty = min.y;\r\n\r\n  \t} else if (code & 2) { // right\r\n  \t\tx = max.x;\r\n  \t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n  \t} else if (code & 1) { // left\r\n  \t\tx = min.x;\r\n  \t\ty = a.y + dy * (min.x - a.x) / dx;\r\n  \t}\r\n\r\n  \treturn new Point(x, y, round);\r\n  }\r\n\r\n  function _getBitCode(p, bounds) {\r\n  \tvar code = 0;\r\n\r\n  \tif (p.x < bounds.min.x) { // left\r\n  \t\tcode |= 1;\r\n  \t} else if (p.x > bounds.max.x) { // right\r\n  \t\tcode |= 2;\r\n  \t}\r\n\r\n  \tif (p.y < bounds.min.y) { // bottom\r\n  \t\tcode |= 4;\r\n  \t} else if (p.y > bounds.max.y) { // top\r\n  \t\tcode |= 8;\r\n  \t}\r\n\r\n  \treturn code;\r\n  }\r\n\r\n  // square distance (to avoid unnecessary Math.sqrt calls)\r\n  function _sqDist(p1, p2) {\r\n  \tvar dx = p2.x - p1.x,\r\n  \t    dy = p2.y - p1.y;\r\n  \treturn dx * dx + dy * dy;\r\n  }\r\n\r\n  // return closest point on segment or distance to that point\r\n  function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n  \tvar x = p1.x,\r\n  \t    y = p1.y,\r\n  \t    dx = p2.x - x,\r\n  \t    dy = p2.y - y,\r\n  \t    dot = dx * dx + dy * dy,\r\n  \t    t;\r\n\r\n  \tif (dot > 0) {\r\n  \t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n  \t\tif (t > 1) {\r\n  \t\t\tx = p2.x;\r\n  \t\t\ty = p2.y;\r\n  \t\t} else if (t > 0) {\r\n  \t\t\tx += dx * t;\r\n  \t\t\ty += dy * t;\r\n  \t\t}\r\n  \t}\r\n\r\n  \tdx = p.x - x;\r\n  \tdy = p.y - y;\r\n\r\n  \treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n  }\r\n\r\n\r\n  // @function isFlat(latlngs: LatLng[]): Boolean\r\n  // Returns true if `latlngs` is a flat array, false is nested.\r\n  function isFlat(latlngs) {\r\n  \treturn !isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n  }\r\n\r\n  function _flat(latlngs) {\r\n  \tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n  \treturn isFlat(latlngs);\r\n  }\r\n\r\n  /* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n   * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.\r\n   */\r\n  function polylineCenter(latlngs, crs) {\r\n  \tvar i, halfDist, segDist, dist, p1, p2, ratio, center;\r\n\r\n  \tif (!latlngs || latlngs.length === 0) {\r\n  \t\tthrow new Error('latlngs not passed');\r\n  \t}\r\n\r\n  \tif (!isFlat(latlngs)) {\r\n  \t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n  \t\tlatlngs = latlngs[0];\r\n  \t}\r\n\r\n  \tvar points = [];\r\n  \tfor (var j in latlngs) {\r\n  \t\tpoints.push(crs.project(toLatLng(latlngs[j])));\r\n  \t}\r\n\r\n  \tvar len = points.length;\r\n\r\n  \tfor (i = 0, halfDist = 0; i < len - 1; i++) {\r\n  \t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\r\n  \t}\r\n\r\n  \t// The line is so small in the current view that all points are on the same pixel.\r\n  \tif (halfDist === 0) {\r\n  \t\tcenter = points[0];\r\n  \t} else {\r\n  \t\tfor (i = 0, dist = 0; i < len - 1; i++) {\r\n  \t\t\tp1 = points[i];\r\n  \t\t\tp2 = points[i + 1];\r\n  \t\t\tsegDist = p1.distanceTo(p2);\r\n  \t\t\tdist += segDist;\r\n\r\n  \t\t\tif (dist > halfDist) {\r\n  \t\t\t\tratio = (dist - halfDist) / segDist;\r\n  \t\t\t\tcenter = [\r\n  \t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\r\n  \t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\r\n  \t\t\t\t];\r\n  \t\t\t\tbreak;\r\n  \t\t\t}\r\n  \t\t}\r\n  \t}\r\n  \treturn crs.unproject(toPoint(center));\r\n  }\n\n  var LineUtil = {\n    __proto__: null,\n    simplify: simplify,\n    pointToSegmentDistance: pointToSegmentDistance,\n    closestPointOnSegment: closestPointOnSegment,\n    clipSegment: clipSegment,\n    _getEdgeIntersection: _getEdgeIntersection,\n    _getBitCode: _getBitCode,\n    _sqClosestPointOnSegment: _sqClosestPointOnSegment,\n    isFlat: isFlat,\n    _flat: _flat,\n    polylineCenter: polylineCenter\n  };\n\n  /*\r\n   * @namespace PolyUtil\r\n   * Various utility functions for polygon geometries.\r\n   */\r\n\r\n  /* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n   * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n   * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n   * performance. Note that polygon points needs different algorithm for clipping\r\n   * than polyline, so there's a separate method for it.\r\n   */\r\n  function clipPolygon(points, bounds, round) {\r\n  \tvar clippedPoints,\r\n  \t    edges = [1, 4, 2, 8],\r\n  \t    i, j, k,\r\n  \t    a, b,\r\n  \t    len, edge, p;\r\n\r\n  \tfor (i = 0, len = points.length; i < len; i++) {\r\n  \t\tpoints[i]._code = _getBitCode(points[i], bounds);\r\n  \t}\r\n\r\n  \t// for each edge (left, bottom, right, top)\r\n  \tfor (k = 0; k < 4; k++) {\r\n  \t\tedge = edges[k];\r\n  \t\tclippedPoints = [];\r\n\r\n  \t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n  \t\t\ta = points[i];\r\n  \t\t\tb = points[j];\r\n\r\n  \t\t\t// if a is inside the clip window\r\n  \t\t\tif (!(a._code & edge)) {\r\n  \t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n  \t\t\t\tif (b._code & edge) {\r\n  \t\t\t\t\tp = _getEdgeIntersection(b, a, edge, bounds, round);\r\n  \t\t\t\t\tp._code = _getBitCode(p, bounds);\r\n  \t\t\t\t\tclippedPoints.push(p);\r\n  \t\t\t\t}\r\n  \t\t\t\tclippedPoints.push(a);\r\n\r\n  \t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n  \t\t\t} else if (!(b._code & edge)) {\r\n  \t\t\t\tp = _getEdgeIntersection(b, a, edge, bounds, round);\r\n  \t\t\t\tp._code = _getBitCode(p, bounds);\r\n  \t\t\t\tclippedPoints.push(p);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t\tpoints = clippedPoints;\r\n  \t}\r\n\r\n  \treturn points;\r\n  }\r\n\r\n  /* @function polygonCenter(latlngs: LatLng[] crs: CRS): LatLng\r\n   * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.\r\n   */\r\n  function polygonCenter(latlngs, crs) {\r\n  \tvar i, j, p1, p2, f, area, x, y, center;\r\n\r\n  \tif (!latlngs || latlngs.length === 0) {\r\n  \t\tthrow new Error('latlngs not passed');\r\n  \t}\r\n\r\n  \tif (!isFlat(latlngs)) {\r\n  \t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n  \t\tlatlngs = latlngs[0];\r\n  \t}\r\n\r\n  \tvar points = [];\r\n  \tfor (var k in latlngs) {\r\n  \t\tpoints.push(crs.project(toLatLng(latlngs[k])));\r\n  \t}\r\n\r\n  \tvar len = points.length;\r\n  \tarea = x = y = 0;\r\n\r\n  \t// polygon centroid algorithm;\r\n  \tfor (i = 0, j = len - 1; i < len; j = i++) {\r\n  \t\tp1 = points[i];\r\n  \t\tp2 = points[j];\r\n\r\n  \t\tf = p1.y * p2.x - p2.y * p1.x;\r\n  \t\tx += (p1.x + p2.x) * f;\r\n  \t\ty += (p1.y + p2.y) * f;\r\n  \t\tarea += f * 3;\r\n  \t}\r\n\r\n  \tif (area === 0) {\r\n  \t\t// Polygon is so small that all points are on same pixel.\r\n  \t\tcenter = points[0];\r\n  \t} else {\r\n  \t\tcenter = [x / area, y / area];\r\n  \t}\r\n  \treturn crs.unproject(toPoint(center));\r\n  }\n\n  var PolyUtil = {\n    __proto__: null,\n    clipPolygon: clipPolygon,\n    polygonCenter: polygonCenter\n  };\n\n  /*\r\n   * @namespace Projection\r\n   * @section\r\n   * Leaflet comes with a set of already defined Projections out of the box:\r\n   *\r\n   * @projection L.Projection.LonLat\r\n   *\r\n   * Equirectangular, or Plate Carree projection — the most simple projection,\r\n   * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n   * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n   * `EPSG:4326` and `Simple` CRS.\r\n   */\r\n\r\n  var LonLat = {\r\n  \tproject: function (latlng) {\r\n  \t\treturn new Point(latlng.lng, latlng.lat);\r\n  \t},\r\n\r\n  \tunproject: function (point) {\r\n  \t\treturn new LatLng(point.y, point.x);\r\n  \t},\r\n\r\n  \tbounds: new Bounds([-180, -90], [180, 90])\r\n  };\n\n  /*\r\n   * @namespace Projection\r\n   * @projection L.Projection.Mercator\r\n   *\r\n   * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n   */\r\n\r\n  var Mercator = {\r\n  \tR: 6378137,\r\n  \tR_MINOR: 6356752.314245179,\r\n\r\n  \tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n  \tproject: function (latlng) {\r\n  \t\tvar d = Math.PI / 180,\r\n  \t\t    r = this.R,\r\n  \t\t    y = latlng.lat * d,\r\n  \t\t    tmp = this.R_MINOR / r,\r\n  \t\t    e = Math.sqrt(1 - tmp * tmp),\r\n  \t\t    con = e * Math.sin(y);\r\n\r\n  \t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n  \t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n  \t\treturn new Point(latlng.lng * d * r, y);\r\n  \t},\r\n\r\n  \tunproject: function (point) {\r\n  \t\tvar d = 180 / Math.PI,\r\n  \t\t    r = this.R,\r\n  \t\t    tmp = this.R_MINOR / r,\r\n  \t\t    e = Math.sqrt(1 - tmp * tmp),\r\n  \t\t    ts = Math.exp(-point.y / r),\r\n  \t\t    phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n  \t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n  \t\t\tcon = e * Math.sin(phi);\r\n  \t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n  \t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n  \t\t\tphi += dphi;\r\n  \t\t}\r\n\r\n  \t\treturn new LatLng(phi * d, point.x * d / r);\r\n  \t}\r\n  };\n\n  /*\n   * @class Projection\n\n   * An object with methods for projecting geographical coordinates of the world onto\n   * a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).\n\n   * @property bounds: Bounds\n   * The bounds (specified in CRS units) where the projection is valid\n\n   * @method project(latlng: LatLng): Point\n   * Projects geographical coordinates into a 2D point.\n   * Only accepts actual `L.LatLng` instances, not arrays.\n\n   * @method unproject(point: Point): LatLng\n   * The inverse of `project`. Projects a 2D point into a geographical location.\n   * Only accepts actual `L.Point` instances, not arrays.\n\n   * Note that the projection instances do not inherit from Leaflet's `Class` object,\n   * and can't be instantiated. Also, new classes can't inherit from them,\n   * and methods can't be added to them with the `include` function.\n\n   */\n\n  var index = {\n    __proto__: null,\n    LonLat: LonLat,\n    Mercator: Mercator,\n    SphericalMercator: SphericalMercator\n  };\n\n  /*\r\n   * @namespace CRS\r\n   * @crs L.CRS.EPSG3395\r\n   *\r\n   * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n   */\r\n  var EPSG3395 = extend({}, Earth, {\r\n  \tcode: 'EPSG:3395',\r\n  \tprojection: Mercator,\r\n\r\n  \ttransformation: (function () {\r\n  \t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n  \t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n  \t}())\r\n  });\n\n  /*\r\n   * @namespace CRS\r\n   * @crs L.CRS.EPSG4326\r\n   *\r\n   * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n   *\r\n   * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n   * which is a breaking change from 0.7.x behaviour.  If you are using a `TileLayer`\r\n   * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n   * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n   * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n   */\r\n\r\n  var EPSG4326 = extend({}, Earth, {\r\n  \tcode: 'EPSG:4326',\r\n  \tprojection: LonLat,\r\n  \ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n  });\n\n  /*\n   * @namespace CRS\n   * @crs L.CRS.Simple\n   *\n   * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n   * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n   * axis should still be inverted (going from bottom to top). `distance()` returns\n   * simple euclidean distance.\n   */\n\n  var Simple = extend({}, CRS, {\n  \tprojection: LonLat,\n  \ttransformation: toTransformation(1, 0, -1, 0),\n\n  \tscale: function (zoom) {\n  \t\treturn Math.pow(2, zoom);\n  \t},\n\n  \tzoom: function (scale) {\n  \t\treturn Math.log(scale) / Math.LN2;\n  \t},\n\n  \tdistance: function (latlng1, latlng2) {\n  \t\tvar dx = latlng2.lng - latlng1.lng,\n  \t\t    dy = latlng2.lat - latlng1.lat;\n\n  \t\treturn Math.sqrt(dx * dx + dy * dy);\n  \t},\n\n  \tinfinite: true\n  });\n\n  CRS.Earth = Earth;\n  CRS.EPSG3395 = EPSG3395;\n  CRS.EPSG3857 = EPSG3857;\n  CRS.EPSG900913 = EPSG900913;\n  CRS.EPSG4326 = EPSG4326;\n  CRS.Simple = Simple;\n\n  /*\n   * @class Layer\n   * @inherits Evented\n   * @aka L.Layer\n   * @aka ILayer\n   *\n   * A set of methods from the Layer base class that all Leaflet layers use.\n   * Inherits all methods, options and events from `L.Evented`.\n   *\n   * @example\n   *\n   * ```js\n   * var layer = L.marker(latlng).addTo(map);\n   * layer.addTo(map);\n   * layer.remove();\n   * ```\n   *\n   * @event add: Event\n   * Fired after the layer is added to a map\n   *\n   * @event remove: Event\n   * Fired after the layer is removed from a map\n   */\n\n\n  var Layer = Evented.extend({\n\n  \t// Classes extending `L.Layer` will inherit the following options:\n  \toptions: {\n  \t\t// @option pane: String = 'overlayPane'\n  \t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n  \t\tpane: 'overlayPane',\n\n  \t\t// @option attribution: String = null\n  \t\t// String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n  \t\tattribution: null,\n\n  \t\tbubblingMouseEvents: true\n  \t},\n\n  \t/* @section\n  \t * Classes extending `L.Layer` will inherit the following methods:\n  \t *\n  \t * @method addTo(map: Map|LayerGroup): this\n  \t * Adds the layer to the given map or layer group.\n  \t */\n  \taddTo: function (map) {\n  \t\tmap.addLayer(this);\n  \t\treturn this;\n  \t},\n\n  \t// @method remove: this\n  \t// Removes the layer from the map it is currently active on.\n  \tremove: function () {\n  \t\treturn this.removeFrom(this._map || this._mapToAdd);\n  \t},\n\n  \t// @method removeFrom(map: Map): this\n  \t// Removes the layer from the given map\n  \t//\n  \t// @alternative\n  \t// @method removeFrom(group: LayerGroup): this\n  \t// Removes the layer from the given `LayerGroup`\n  \tremoveFrom: function (obj) {\n  \t\tif (obj) {\n  \t\t\tobj.removeLayer(this);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method getPane(name? : String): HTMLElement\n  \t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n  \tgetPane: function (name) {\n  \t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n  \t},\n\n  \taddInteractiveTarget: function (targetEl) {\n  \t\tthis._map._targets[stamp(targetEl)] = this;\n  \t\treturn this;\n  \t},\n\n  \tremoveInteractiveTarget: function (targetEl) {\n  \t\tdelete this._map._targets[stamp(targetEl)];\n  \t\treturn this;\n  \t},\n\n  \t// @method getAttribution: String\n  \t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n  \tgetAttribution: function () {\n  \t\treturn this.options.attribution;\n  \t},\n\n  \t_layerAdd: function (e) {\n  \t\tvar map = e.target;\n\n  \t\t// check in case layer gets added and then removed before the map is ready\n  \t\tif (!map.hasLayer(this)) { return; }\n\n  \t\tthis._map = map;\n  \t\tthis._zoomAnimated = map._zoomAnimated;\n\n  \t\tif (this.getEvents) {\n  \t\t\tvar events = this.getEvents();\n  \t\t\tmap.on(events, this);\n  \t\t\tthis.once('remove', function () {\n  \t\t\t\tmap.off(events, this);\n  \t\t\t}, this);\n  \t\t}\n\n  \t\tthis.onAdd(map);\n\n  \t\tthis.fire('add');\n  \t\tmap.fire('layeradd', {layer: this});\n  \t}\n  });\n\n  /* @section Extension methods\n   * @uninheritable\n   *\n   * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n   *\n   * @method onAdd(map: Map): this\n   * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n   *\n   * @method onRemove(map: Map): this\n   * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n   *\n   * @method getEvents(): Object\n   * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n   *\n   * @method getAttribution(): String\n   * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n   *\n   * @method beforeAdd(map: Map): this\n   * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n   */\n\n\n  /* @namespace Map\n   * @section Layer events\n   *\n   * @event layeradd: LayerEvent\n   * Fired when a new layer is added to the map.\n   *\n   * @event layerremove: LayerEvent\n   * Fired when some layer is removed from the map\n   *\n   * @section Methods for Layers and Controls\n   */\n  Map.include({\n  \t// @method addLayer(layer: Layer): this\n  \t// Adds the given layer to the map\n  \taddLayer: function (layer) {\n  \t\tif (!layer._layerAdd) {\n  \t\t\tthrow new Error('The provided object is not a Layer.');\n  \t\t}\n\n  \t\tvar id = stamp(layer);\n  \t\tif (this._layers[id]) { return this; }\n  \t\tthis._layers[id] = layer;\n\n  \t\tlayer._mapToAdd = this;\n\n  \t\tif (layer.beforeAdd) {\n  \t\t\tlayer.beforeAdd(this);\n  \t\t}\n\n  \t\tthis.whenReady(layer._layerAdd, layer);\n\n  \t\treturn this;\n  \t},\n\n  \t// @method removeLayer(layer: Layer): this\n  \t// Removes the given layer from the map.\n  \tremoveLayer: function (layer) {\n  \t\tvar id = stamp(layer);\n\n  \t\tif (!this._layers[id]) { return this; }\n\n  \t\tif (this._loaded) {\n  \t\t\tlayer.onRemove(this);\n  \t\t}\n\n  \t\tdelete this._layers[id];\n\n  \t\tif (this._loaded) {\n  \t\t\tthis.fire('layerremove', {layer: layer});\n  \t\t\tlayer.fire('remove');\n  \t\t}\n\n  \t\tlayer._map = layer._mapToAdd = null;\n\n  \t\treturn this;\n  \t},\n\n  \t// @method hasLayer(layer: Layer): Boolean\n  \t// Returns `true` if the given layer is currently added to the map\n  \thasLayer: function (layer) {\n  \t\treturn stamp(layer) in this._layers;\n  \t},\n\n  \t/* @method eachLayer(fn: Function, context?: Object): this\n  \t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n  \t * ```\n  \t * map.eachLayer(function(layer){\n  \t *     layer.bindPopup('Hello');\n  \t * });\n  \t * ```\n  \t */\n  \teachLayer: function (method, context) {\n  \t\tfor (var i in this._layers) {\n  \t\t\tmethod.call(context, this._layers[i]);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t_addLayers: function (layers) {\n  \t\tlayers = layers ? (isArray(layers) ? layers : [layers]) : [];\n\n  \t\tfor (var i = 0, len = layers.length; i < len; i++) {\n  \t\t\tthis.addLayer(layers[i]);\n  \t\t}\n  \t},\n\n  \t_addZoomLimit: function (layer) {\n  \t\tif (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n  \t\t\tthis._zoomBoundLayers[stamp(layer)] = layer;\n  \t\t\tthis._updateZoomLevels();\n  \t\t}\n  \t},\n\n  \t_removeZoomLimit: function (layer) {\n  \t\tvar id = stamp(layer);\n\n  \t\tif (this._zoomBoundLayers[id]) {\n  \t\t\tdelete this._zoomBoundLayers[id];\n  \t\t\tthis._updateZoomLevels();\n  \t\t}\n  \t},\n\n  \t_updateZoomLevels: function () {\n  \t\tvar minZoom = Infinity,\n  \t\t    maxZoom = -Infinity,\n  \t\t    oldZoomSpan = this._getZoomSpan();\n\n  \t\tfor (var i in this._zoomBoundLayers) {\n  \t\t\tvar options = this._zoomBoundLayers[i].options;\n\n  \t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n  \t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n  \t\t}\n\n  \t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n  \t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n  \t\t// @section Map state change events\n  \t\t// @event zoomlevelschange: Event\n  \t\t// Fired when the number of zoomlevels on the map is changed due\n  \t\t// to adding or removing a layer.\n  \t\tif (oldZoomSpan !== this._getZoomSpan()) {\n  \t\t\tthis.fire('zoomlevelschange');\n  \t\t}\n\n  \t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n  \t\t\tthis.setZoom(this._layersMaxZoom);\n  \t\t}\n  \t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n  \t\t\tthis.setZoom(this._layersMinZoom);\n  \t\t}\n  \t}\n  });\n\n  /*\r\n   * @class LayerGroup\r\n   * @aka L.LayerGroup\r\n   * @inherits Interactive layer\r\n   *\r\n   * Used to group several layers and handle them as one. If you add it to the map,\r\n   * any layers added or removed from the group will be added/removed on the map as\r\n   * well. Extends `Layer`.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * L.layerGroup([marker1, marker2])\r\n   * \t.addLayer(polyline)\r\n   * \t.addTo(map);\r\n   * ```\r\n   */\r\n\r\n  var LayerGroup = Layer.extend({\r\n\r\n  \tinitialize: function (layers, options) {\r\n  \t\tsetOptions(this, options);\r\n\r\n  \t\tthis._layers = {};\r\n\r\n  \t\tvar i, len;\r\n\r\n  \t\tif (layers) {\r\n  \t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n  \t\t\t\tthis.addLayer(layers[i]);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method addLayer(layer: Layer): this\r\n  \t// Adds the given layer to the group.\r\n  \taddLayer: function (layer) {\r\n  \t\tvar id = this.getLayerId(layer);\r\n\r\n  \t\tthis._layers[id] = layer;\r\n\r\n  \t\tif (this._map) {\r\n  \t\t\tthis._map.addLayer(layer);\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method removeLayer(layer: Layer): this\r\n  \t// Removes the given layer from the group.\r\n  \t// @alternative\r\n  \t// @method removeLayer(id: Number): this\r\n  \t// Removes the layer with the given internal ID from the group.\r\n  \tremoveLayer: function (layer) {\r\n  \t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n  \t\tif (this._map && this._layers[id]) {\r\n  \t\t\tthis._map.removeLayer(this._layers[id]);\r\n  \t\t}\r\n\r\n  \t\tdelete this._layers[id];\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method hasLayer(layer: Layer): Boolean\r\n  \t// Returns `true` if the given layer is currently added to the group.\r\n  \t// @alternative\r\n  \t// @method hasLayer(id: Number): Boolean\r\n  \t// Returns `true` if the given internal ID is currently added to the group.\r\n  \thasLayer: function (layer) {\r\n  \t\tvar layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\r\n  \t\treturn layerId in this._layers;\r\n  \t},\r\n\r\n  \t// @method clearLayers(): this\r\n  \t// Removes all the layers from the group.\r\n  \tclearLayers: function () {\r\n  \t\treturn this.eachLayer(this.removeLayer, this);\r\n  \t},\r\n\r\n  \t// @method invoke(methodName: String, …): this\r\n  \t// Calls `methodName` on every layer contained in this group, passing any\r\n  \t// additional parameters. Has no effect if the layers contained do not\r\n  \t// implement `methodName`.\r\n  \tinvoke: function (methodName) {\r\n  \t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n  \t\t    i, layer;\r\n\r\n  \t\tfor (i in this._layers) {\r\n  \t\t\tlayer = this._layers[i];\r\n\r\n  \t\t\tif (layer[methodName]) {\r\n  \t\t\t\tlayer[methodName].apply(layer, args);\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n  \t\tthis.eachLayer(map.addLayer, map);\r\n  \t},\r\n\r\n  \tonRemove: function (map) {\r\n  \t\tthis.eachLayer(map.removeLayer, map);\r\n  \t},\r\n\r\n  \t// @method eachLayer(fn: Function, context?: Object): this\r\n  \t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n  \t// ```js\r\n  \t// group.eachLayer(function (layer) {\r\n  \t// \tlayer.bindPopup('Hello');\r\n  \t// });\r\n  \t// ```\r\n  \teachLayer: function (method, context) {\r\n  \t\tfor (var i in this._layers) {\r\n  \t\t\tmethod.call(context, this._layers[i]);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method getLayer(id: Number): Layer\r\n  \t// Returns the layer with the given internal ID.\r\n  \tgetLayer: function (id) {\r\n  \t\treturn this._layers[id];\r\n  \t},\r\n\r\n  \t// @method getLayers(): Layer[]\r\n  \t// Returns an array of all the layers added to the group.\r\n  \tgetLayers: function () {\r\n  \t\tvar layers = [];\r\n  \t\tthis.eachLayer(layers.push, layers);\r\n  \t\treturn layers;\r\n  \t},\r\n\r\n  \t// @method setZIndex(zIndex: Number): this\r\n  \t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n  \tsetZIndex: function (zIndex) {\r\n  \t\treturn this.invoke('setZIndex', zIndex);\r\n  \t},\r\n\r\n  \t// @method getLayerId(layer: Layer): Number\r\n  \t// Returns the internal ID for a layer\r\n  \tgetLayerId: function (layer) {\r\n  \t\treturn stamp(layer);\r\n  \t}\r\n  });\r\n\r\n\r\n  // @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n  // Create a layer group, optionally given an initial set of layers and an `options` object.\r\n  var layerGroup = function (layers, options) {\r\n  \treturn new LayerGroup(layers, options);\r\n  };\n\n  /*\r\n   * @class FeatureGroup\r\n   * @aka L.FeatureGroup\r\n   * @inherits LayerGroup\r\n   *\r\n   * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n   *  * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n   *  * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n   * handler, it will handle events from any of the layers. This includes mouse events\r\n   * and custom events.\r\n   *  * Has `layeradd` and `layerremove` events\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * L.featureGroup([marker1, marker2, polyline])\r\n   * \t.bindPopup('Hello world!')\r\n   * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n   * \t.addTo(map);\r\n   * ```\r\n   */\r\n\r\n  var FeatureGroup = LayerGroup.extend({\r\n\r\n  \taddLayer: function (layer) {\r\n  \t\tif (this.hasLayer(layer)) {\r\n  \t\t\treturn this;\r\n  \t\t}\r\n\r\n  \t\tlayer.addEventParent(this);\r\n\r\n  \t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n  \t\t// @event layeradd: LayerEvent\r\n  \t\t// Fired when a layer is added to this `FeatureGroup`\r\n  \t\treturn this.fire('layeradd', {layer: layer});\r\n  \t},\r\n\r\n  \tremoveLayer: function (layer) {\r\n  \t\tif (!this.hasLayer(layer)) {\r\n  \t\t\treturn this;\r\n  \t\t}\r\n  \t\tif (layer in this._layers) {\r\n  \t\t\tlayer = this._layers[layer];\r\n  \t\t}\r\n\r\n  \t\tlayer.removeEventParent(this);\r\n\r\n  \t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n  \t\t// @event layerremove: LayerEvent\r\n  \t\t// Fired when a layer is removed from this `FeatureGroup`\r\n  \t\treturn this.fire('layerremove', {layer: layer});\r\n  \t},\r\n\r\n  \t// @method setStyle(style: Path options): this\r\n  \t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n  \tsetStyle: function (style) {\r\n  \t\treturn this.invoke('setStyle', style);\r\n  \t},\r\n\r\n  \t// @method bringToFront(): this\r\n  \t// Brings the layer group to the top of all other layers\r\n  \tbringToFront: function () {\r\n  \t\treturn this.invoke('bringToFront');\r\n  \t},\r\n\r\n  \t// @method bringToBack(): this\r\n  \t// Brings the layer group to the back of all other layers\r\n  \tbringToBack: function () {\r\n  \t\treturn this.invoke('bringToBack');\r\n  \t},\r\n\r\n  \t// @method getBounds(): LatLngBounds\r\n  \t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n  \tgetBounds: function () {\r\n  \t\tvar bounds = new LatLngBounds();\r\n\r\n  \t\tfor (var id in this._layers) {\r\n  \t\t\tvar layer = this._layers[id];\r\n  \t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n  \t\t}\r\n  \t\treturn bounds;\r\n  \t}\r\n  });\r\n\r\n  // @factory L.featureGroup(layers?: Layer[], options?: Object)\r\n  // Create a feature group, optionally given an initial set of layers and an `options` object.\r\n  var featureGroup = function (layers, options) {\r\n  \treturn new FeatureGroup(layers, options);\r\n  };\n\n  /*\r\n   * @class Icon\r\n   * @aka L.Icon\r\n   *\r\n   * Represents an icon to provide when creating a marker.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var myIcon = L.icon({\r\n   *     iconUrl: 'my-icon.png',\r\n   *     iconRetinaUrl: 'my-icon@2x.png',\r\n   *     iconSize: [38, 95],\r\n   *     iconAnchor: [22, 94],\r\n   *     popupAnchor: [-3, -76],\r\n   *     shadowUrl: 'my-icon-shadow.png',\r\n   *     shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n   *     shadowSize: [68, 95],\r\n   *     shadowAnchor: [22, 94]\r\n   * });\r\n   *\r\n   * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n   * ```\r\n   *\r\n   * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n   *\r\n   */\r\n\r\n  var Icon = Class.extend({\r\n\r\n  \t/* @section\r\n  \t * @aka Icon options\r\n  \t *\r\n  \t * @option iconUrl: String = null\r\n  \t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n  \t *\r\n  \t * @option iconRetinaUrl: String = null\r\n  \t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n  \t * script path). Used for Retina screen devices.\r\n  \t *\r\n  \t * @option iconSize: Point = null\r\n  \t * Size of the icon image in pixels.\r\n  \t *\r\n  \t * @option iconAnchor: Point = null\r\n  \t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n  \t * will be aligned so that this point is at the marker's geographical location. Centered\r\n  \t * by default if size is specified, also can be set in CSS with negative margins.\r\n  \t *\r\n  \t * @option popupAnchor: Point = [0, 0]\r\n  \t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n  \t *\r\n  \t * @option tooltipAnchor: Point = [0, 0]\r\n  \t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n  \t *\r\n  \t * @option shadowUrl: String = null\r\n  \t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n  \t *\r\n  \t * @option shadowRetinaUrl: String = null\r\n  \t *\r\n  \t * @option shadowSize: Point = null\r\n  \t * Size of the shadow image in pixels.\r\n  \t *\r\n  \t * @option shadowAnchor: Point = null\r\n  \t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n  \t * as iconAnchor if not specified).\r\n  \t *\r\n  \t * @option className: String = ''\r\n  \t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n  \t */\r\n\r\n  \toptions: {\r\n  \t\tpopupAnchor: [0, 0],\r\n  \t\ttooltipAnchor: [0, 0],\r\n\r\n  \t\t// @option crossOrigin: Boolean|String = false\r\n  \t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n  \t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n  \t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n  \t\tcrossOrigin: false\r\n  \t},\r\n\r\n  \tinitialize: function (options) {\r\n  \t\tsetOptions(this, options);\r\n  \t},\r\n\r\n  \t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n  \t// Called internally when the icon has to be shown, returns a `<img>` HTML element\r\n  \t// styled according to the options.\r\n  \tcreateIcon: function (oldIcon) {\r\n  \t\treturn this._createIcon('icon', oldIcon);\r\n  \t},\r\n\r\n  \t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n  \t// As `createIcon`, but for the shadow beneath it.\r\n  \tcreateShadow: function (oldIcon) {\r\n  \t\treturn this._createIcon('shadow', oldIcon);\r\n  \t},\r\n\r\n  \t_createIcon: function (name, oldIcon) {\r\n  \t\tvar src = this._getIconUrl(name);\r\n\r\n  \t\tif (!src) {\r\n  \t\t\tif (name === 'icon') {\r\n  \t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n  \t\t\t}\r\n  \t\t\treturn null;\r\n  \t\t}\r\n\r\n  \t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n  \t\tthis._setIconStyles(img, name);\r\n\r\n  \t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n  \t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n  \t\t}\r\n\r\n  \t\treturn img;\r\n  \t},\r\n\r\n  \t_setIconStyles: function (img, name) {\r\n  \t\tvar options = this.options;\r\n  \t\tvar sizeOption = options[name + 'Size'];\r\n\r\n  \t\tif (typeof sizeOption === 'number') {\r\n  \t\t\tsizeOption = [sizeOption, sizeOption];\r\n  \t\t}\r\n\r\n  \t\tvar size = toPoint(sizeOption),\r\n  \t\t    anchor = toPoint(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n  \t\t            size && size.divideBy(2, true));\r\n\r\n  \t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n  \t\tif (anchor) {\r\n  \t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n  \t\t\timg.style.marginTop  = (-anchor.y) + 'px';\r\n  \t\t}\r\n\r\n  \t\tif (size) {\r\n  \t\t\timg.style.width  = size.x + 'px';\r\n  \t\t\timg.style.height = size.y + 'px';\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_createImg: function (src, el) {\r\n  \t\tel = el || document.createElement('img');\r\n  \t\tel.src = src;\r\n  \t\treturn el;\r\n  \t},\r\n\r\n  \t_getIconUrl: function (name) {\r\n  \t\treturn Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n  \t}\r\n  });\r\n\r\n\r\n  // @factory L.icon(options: Icon options)\r\n  // Creates an icon instance with the given options.\r\n  function icon(options) {\r\n  \treturn new Icon(options);\r\n  }\n\n  /*\n   * @miniclass Icon.Default (Icon)\n   * @aka L.Icon.Default\n   * @section\n   *\n   * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n   * no icon is specified. Points to the blue marker image distributed with Leaflet\n   * releases.\n   *\n   * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n   * (which is a set of `Icon options`).\n   *\n   * If you want to _completely_ replace the default icon, override the\n   * `L.Marker.prototype.options.icon` with your own icon instead.\n   */\n\n  var IconDefault = Icon.extend({\n\n  \toptions: {\n  \t\ticonUrl:       'marker-icon.png',\n  \t\ticonRetinaUrl: 'marker-icon-2x.png',\n  \t\tshadowUrl:     'marker-shadow.png',\n  \t\ticonSize:    [25, 41],\n  \t\ticonAnchor:  [12, 41],\n  \t\tpopupAnchor: [1, -34],\n  \t\ttooltipAnchor: [16, -28],\n  \t\tshadowSize:  [41, 41]\n  \t},\n\n  \t_getIconUrl: function (name) {\n  \t\tif (typeof IconDefault.imagePath !== 'string') {\t// Deprecated, backwards-compatibility only\n  \t\t\tIconDefault.imagePath = this._detectIconPath();\n  \t\t}\n\n  \t\t// @option imagePath: String\n  \t\t// `Icon.Default` will try to auto-detect the location of the\n  \t\t// blue icon images. If you are placing these images in a non-standard\n  \t\t// way, set this option to point to the right path.\n  \t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n  \t},\n\n  \t_stripUrl: function (path) {\t// separate function to use in tests\n  \t\tvar strip = function (str, re, idx) {\n  \t\t\tvar match = re.exec(str);\n  \t\t\treturn match && match[idx];\n  \t\t};\n  \t\tpath = strip(path, /^url\\((['\"])?(.+)\\1\\)$/, 2);\n  \t\treturn path && strip(path, /^(.*)marker-icon\\.png$/, 1);\n  \t},\n\n  \t_detectIconPath: function () {\n  \t\tvar el = create$1('div',  'leaflet-default-icon-path', document.body);\n  \t\tvar path = getStyle(el, 'background-image') ||\n  \t\t           getStyle(el, 'backgroundImage');\t// IE8\n\n  \t\tdocument.body.removeChild(el);\n  \t\tpath = this._stripUrl(path);\n  \t\tif (path) { return path; }\n  \t\tvar link = document.querySelector('link[href$=\"leaflet.css\"]');\n  \t\tif (!link) { return ''; }\n  \t\treturn link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);\n  \t}\n  });\n\n  /*\n   * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n   */\n\n\n  /* @namespace Marker\n   * @section Interaction handlers\n   *\n   * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n   *\n   * ```js\n   * marker.dragging.disable();\n   * ```\n   *\n   * @property dragging: Handler\n   * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n   */\n\n  var MarkerDrag = Handler.extend({\n  \tinitialize: function (marker) {\n  \t\tthis._marker = marker;\n  \t},\n\n  \taddHooks: function () {\n  \t\tvar icon = this._marker._icon;\n\n  \t\tif (!this._draggable) {\n  \t\t\tthis._draggable = new Draggable(icon, icon, true);\n  \t\t}\n\n  \t\tthis._draggable.on({\n  \t\t\tdragstart: this._onDragStart,\n  \t\t\tpredrag: this._onPreDrag,\n  \t\t\tdrag: this._onDrag,\n  \t\t\tdragend: this._onDragEnd\n  \t\t}, this).enable();\n\n  \t\taddClass(icon, 'leaflet-marker-draggable');\n  \t},\n\n  \tremoveHooks: function () {\n  \t\tthis._draggable.off({\n  \t\t\tdragstart: this._onDragStart,\n  \t\t\tpredrag: this._onPreDrag,\n  \t\t\tdrag: this._onDrag,\n  \t\t\tdragend: this._onDragEnd\n  \t\t}, this).disable();\n\n  \t\tif (this._marker._icon) {\n  \t\t\tremoveClass(this._marker._icon, 'leaflet-marker-draggable');\n  \t\t}\n  \t},\n\n  \tmoved: function () {\n  \t\treturn this._draggable && this._draggable._moved;\n  \t},\n\n  \t_adjustPan: function (e) {\n  \t\tvar marker = this._marker,\n  \t\t    map = marker._map,\n  \t\t    speed = this._marker.options.autoPanSpeed,\n  \t\t    padding = this._marker.options.autoPanPadding,\n  \t\t    iconPos = getPosition(marker._icon),\n  \t\t    bounds = map.getPixelBounds(),\n  \t\t    origin = map.getPixelOrigin();\n\n  \t\tvar panBounds = toBounds(\n  \t\t\tbounds.min._subtract(origin).add(padding),\n  \t\t\tbounds.max._subtract(origin).subtract(padding)\n  \t\t);\n\n  \t\tif (!panBounds.contains(iconPos)) {\n  \t\t\t// Compute incremental movement\n  \t\t\tvar movement = toPoint(\n  \t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n  \t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n  \t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n  \t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n  \t\t\t).multiplyBy(speed);\n\n  \t\t\tmap.panBy(movement, {animate: false});\n\n  \t\t\tthis._draggable._newPos._add(movement);\n  \t\t\tthis._draggable._startPos._add(movement);\n\n  \t\t\tsetPosition(marker._icon, this._draggable._newPos);\n  \t\t\tthis._onDrag(e);\n\n  \t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n  \t\t}\n  \t},\n\n  \t_onDragStart: function () {\n  \t\t// @section Dragging events\n  \t\t// @event dragstart: Event\n  \t\t// Fired when the user starts dragging the marker.\n\n  \t\t// @event movestart: Event\n  \t\t// Fired when the marker starts moving (because of dragging).\n\n  \t\tthis._oldLatLng = this._marker.getLatLng();\n\n  \t\t// When using ES6 imports it could not be set when `Popup` was not imported as well\n  \t\tthis._marker.closePopup && this._marker.closePopup();\n\n  \t\tthis._marker\n  \t\t\t.fire('movestart')\n  \t\t\t.fire('dragstart');\n  \t},\n\n  \t_onPreDrag: function (e) {\n  \t\tif (this._marker.options.autoPan) {\n  \t\t\tcancelAnimFrame(this._panRequest);\n  \t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n  \t\t}\n  \t},\n\n  \t_onDrag: function (e) {\n  \t\tvar marker = this._marker,\n  \t\t    shadow = marker._shadow,\n  \t\t    iconPos = getPosition(marker._icon),\n  \t\t    latlng = marker._map.layerPointToLatLng(iconPos);\n\n  \t\t// update shadow position\n  \t\tif (shadow) {\n  \t\t\tsetPosition(shadow, iconPos);\n  \t\t}\n\n  \t\tmarker._latlng = latlng;\n  \t\te.latlng = latlng;\n  \t\te.oldLatLng = this._oldLatLng;\n\n  \t\t// @event drag: Event\n  \t\t// Fired repeatedly while the user drags the marker.\n  \t\tmarker\n  \t\t    .fire('move', e)\n  \t\t    .fire('drag', e);\n  \t},\n\n  \t_onDragEnd: function (e) {\n  \t\t// @event dragend: DragEndEvent\n  \t\t// Fired when the user stops dragging the marker.\n\n  \t\t cancelAnimFrame(this._panRequest);\n\n  \t\t// @event moveend: Event\n  \t\t// Fired when the marker stops moving (because of dragging).\n  \t\tdelete this._oldLatLng;\n  \t\tthis._marker\n  \t\t    .fire('moveend')\n  \t\t    .fire('dragend', e);\n  \t}\n  });\n\n  /*\r\n   * @class Marker\r\n   * @inherits Interactive layer\r\n   * @aka L.Marker\r\n   * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * L.marker([50.5, 30.5]).addTo(map);\r\n   * ```\r\n   */\r\n\r\n  var Marker = Layer.extend({\r\n\r\n  \t// @section\r\n  \t// @aka Marker options\r\n  \toptions: {\r\n  \t\t// @option icon: Icon = *\r\n  \t\t// Icon instance to use for rendering the marker.\r\n  \t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n  \t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n  \t\ticon: new IconDefault(),\r\n\r\n  \t\t// Option inherited from \"Interactive layer\" abstract class\r\n  \t\tinteractive: true,\r\n\r\n  \t\t// @option keyboard: Boolean = true\r\n  \t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n  \t\tkeyboard: true,\r\n\r\n  \t\t// @option title: String = ''\r\n  \t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n  \t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n  \t\ttitle: '',\r\n\r\n  \t\t// @option alt: String = 'Marker'\r\n  \t\t// Text for the `alt` attribute of the icon image.\r\n  \t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n  \t\talt: 'Marker',\r\n\r\n  \t\t// @option zIndexOffset: Number = 0\r\n  \t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n  \t\tzIndexOffset: 0,\r\n\r\n  \t\t// @option opacity: Number = 1.0\r\n  \t\t// The opacity of the marker.\r\n  \t\topacity: 1,\r\n\r\n  \t\t// @option riseOnHover: Boolean = false\r\n  \t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n  \t\triseOnHover: false,\r\n\r\n  \t\t// @option riseOffset: Number = 250\r\n  \t\t// The z-index offset used for the `riseOnHover` feature.\r\n  \t\triseOffset: 250,\r\n\r\n  \t\t// @option pane: String = 'markerPane'\r\n  \t\t// `Map pane` where the markers icon will be added.\r\n  \t\tpane: 'markerPane',\r\n\r\n  \t\t// @option shadowPane: String = 'shadowPane'\r\n  \t\t// `Map pane` where the markers shadow will be added.\r\n  \t\tshadowPane: 'shadowPane',\r\n\r\n  \t\t// @option bubblingMouseEvents: Boolean = false\r\n  \t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n  \t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n  \t\tbubblingMouseEvents: false,\r\n\r\n  \t\t// @option autoPanOnFocus: Boolean = true\r\n  \t\t// When `true`, the map will pan whenever the marker is focused (via\r\n  \t\t// e.g. pressing `tab` on the keyboard) to ensure the marker is\r\n  \t\t// visible within the map's bounds\r\n  \t\tautoPanOnFocus: true,\r\n\r\n  \t\t// @section Draggable marker options\r\n  \t\t// @option draggable: Boolean = false\r\n  \t\t// Whether the marker is draggable with mouse/touch or not.\r\n  \t\tdraggable: false,\r\n\r\n  \t\t// @option autoPan: Boolean = false\r\n  \t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n  \t\tautoPan: false,\r\n\r\n  \t\t// @option autoPanPadding: Point = Point(50, 50)\r\n  \t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n  \t\t// map edge to start panning the map.\r\n  \t\tautoPanPadding: [50, 50],\r\n\r\n  \t\t// @option autoPanSpeed: Number = 10\r\n  \t\t// Number of pixels the map should pan by.\r\n  \t\tautoPanSpeed: 10\r\n  \t},\r\n\r\n  \t/* @section\r\n  \t *\r\n  \t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n  \t */\r\n\r\n  \tinitialize: function (latlng, options) {\r\n  \t\tsetOptions(this, options);\r\n  \t\tthis._latlng = toLatLng(latlng);\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n  \t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n  \t\tif (this._zoomAnimated) {\r\n  \t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n  \t\t}\r\n\r\n  \t\tthis._initIcon();\r\n  \t\tthis.update();\r\n  \t},\r\n\r\n  \tonRemove: function (map) {\r\n  \t\tif (this.dragging && this.dragging.enabled()) {\r\n  \t\t\tthis.options.draggable = true;\r\n  \t\t\tthis.dragging.removeHooks();\r\n  \t\t}\r\n  \t\tdelete this.dragging;\r\n\r\n  \t\tif (this._zoomAnimated) {\r\n  \t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n  \t\t}\r\n\r\n  \t\tthis._removeIcon();\r\n  \t\tthis._removeShadow();\r\n  \t},\r\n\r\n  \tgetEvents: function () {\r\n  \t\treturn {\r\n  \t\t\tzoom: this.update,\r\n  \t\t\tviewreset: this.update\r\n  \t\t};\r\n  \t},\r\n\r\n  \t// @method getLatLng: LatLng\r\n  \t// Returns the current geographical position of the marker.\r\n  \tgetLatLng: function () {\r\n  \t\treturn this._latlng;\r\n  \t},\r\n\r\n  \t// @method setLatLng(latlng: LatLng): this\r\n  \t// Changes the marker position to the given point.\r\n  \tsetLatLng: function (latlng) {\r\n  \t\tvar oldLatLng = this._latlng;\r\n  \t\tthis._latlng = toLatLng(latlng);\r\n  \t\tthis.update();\r\n\r\n  \t\t// @event move: Event\r\n  \t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n  \t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n  \t},\r\n\r\n  \t// @method setZIndexOffset(offset: Number): this\r\n  \t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n  \tsetZIndexOffset: function (offset) {\r\n  \t\tthis.options.zIndexOffset = offset;\r\n  \t\treturn this.update();\r\n  \t},\r\n\r\n  \t// @method getIcon: Icon\r\n  \t// Returns the current icon used by the marker\r\n  \tgetIcon: function () {\r\n  \t\treturn this.options.icon;\r\n  \t},\r\n\r\n  \t// @method setIcon(icon: Icon): this\r\n  \t// Changes the marker icon.\r\n  \tsetIcon: function (icon) {\r\n\r\n  \t\tthis.options.icon = icon;\r\n\r\n  \t\tif (this._map) {\r\n  \t\t\tthis._initIcon();\r\n  \t\t\tthis.update();\r\n  \t\t}\r\n\r\n  \t\tif (this._popup) {\r\n  \t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \tgetElement: function () {\r\n  \t\treturn this._icon;\r\n  \t},\r\n\r\n  \tupdate: function () {\r\n\r\n  \t\tif (this._icon && this._map) {\r\n  \t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n  \t\t\tthis._setPos(pos);\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_initIcon: function () {\r\n  \t\tvar options = this.options,\r\n  \t\t    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n  \t\tvar icon = options.icon.createIcon(this._icon),\r\n  \t\t    addIcon = false;\r\n\r\n  \t\t// if we're not reusing the icon, remove the old one and init new one\r\n  \t\tif (icon !== this._icon) {\r\n  \t\t\tif (this._icon) {\r\n  \t\t\t\tthis._removeIcon();\r\n  \t\t\t}\r\n  \t\t\taddIcon = true;\r\n\r\n  \t\t\tif (options.title) {\r\n  \t\t\t\ticon.title = options.title;\r\n  \t\t\t}\r\n\r\n  \t\t\tif (icon.tagName === 'IMG') {\r\n  \t\t\t\ticon.alt = options.alt || '';\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\taddClass(icon, classToAdd);\r\n\r\n  \t\tif (options.keyboard) {\r\n  \t\t\ticon.tabIndex = '0';\r\n  \t\t\ticon.setAttribute('role', 'button');\r\n  \t\t}\r\n\r\n  \t\tthis._icon = icon;\r\n\r\n  \t\tif (options.riseOnHover) {\r\n  \t\t\tthis.on({\r\n  \t\t\t\tmouseover: this._bringToFront,\r\n  \t\t\t\tmouseout: this._resetZIndex\r\n  \t\t\t});\r\n  \t\t}\r\n\r\n  \t\tif (this.options.autoPanOnFocus) {\r\n  \t\t\ton(icon, 'focus', this._panOnFocus, this);\r\n  \t\t}\r\n\r\n  \t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n  \t\t    addShadow = false;\r\n\r\n  \t\tif (newShadow !== this._shadow) {\r\n  \t\t\tthis._removeShadow();\r\n  \t\t\taddShadow = true;\r\n  \t\t}\r\n\r\n  \t\tif (newShadow) {\r\n  \t\t\taddClass(newShadow, classToAdd);\r\n  \t\t\tnewShadow.alt = '';\r\n  \t\t}\r\n  \t\tthis._shadow = newShadow;\r\n\r\n\r\n  \t\tif (options.opacity < 1) {\r\n  \t\t\tthis._updateOpacity();\r\n  \t\t}\r\n\r\n\r\n  \t\tif (addIcon) {\r\n  \t\t\tthis.getPane().appendChild(this._icon);\r\n  \t\t}\r\n  \t\tthis._initInteraction();\r\n  \t\tif (newShadow && addShadow) {\r\n  \t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_removeIcon: function () {\r\n  \t\tif (this.options.riseOnHover) {\r\n  \t\t\tthis.off({\r\n  \t\t\t\tmouseover: this._bringToFront,\r\n  \t\t\t\tmouseout: this._resetZIndex\r\n  \t\t\t});\r\n  \t\t}\r\n\r\n  \t\tif (this.options.autoPanOnFocus) {\r\n  \t\t\toff(this._icon, 'focus', this._panOnFocus, this);\r\n  \t\t}\r\n\r\n  \t\tremove(this._icon);\r\n  \t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n  \t\tthis._icon = null;\r\n  \t},\r\n\r\n  \t_removeShadow: function () {\r\n  \t\tif (this._shadow) {\r\n  \t\t\tremove(this._shadow);\r\n  \t\t}\r\n  \t\tthis._shadow = null;\r\n  \t},\r\n\r\n  \t_setPos: function (pos) {\r\n\r\n  \t\tif (this._icon) {\r\n  \t\t\tsetPosition(this._icon, pos);\r\n  \t\t}\r\n\r\n  \t\tif (this._shadow) {\r\n  \t\t\tsetPosition(this._shadow, pos);\r\n  \t\t}\r\n\r\n  \t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n  \t\tthis._resetZIndex();\r\n  \t},\r\n\r\n  \t_updateZIndex: function (offset) {\r\n  \t\tif (this._icon) {\r\n  \t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_animateZoom: function (opt) {\r\n  \t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n  \t\tthis._setPos(pos);\r\n  \t},\r\n\r\n  \t_initInteraction: function () {\r\n\r\n  \t\tif (!this.options.interactive) { return; }\r\n\r\n  \t\taddClass(this._icon, 'leaflet-interactive');\r\n\r\n  \t\tthis.addInteractiveTarget(this._icon);\r\n\r\n  \t\tif (MarkerDrag) {\r\n  \t\t\tvar draggable = this.options.draggable;\r\n  \t\t\tif (this.dragging) {\r\n  \t\t\t\tdraggable = this.dragging.enabled();\r\n  \t\t\t\tthis.dragging.disable();\r\n  \t\t\t}\r\n\r\n  \t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n  \t\t\tif (draggable) {\r\n  \t\t\t\tthis.dragging.enable();\r\n  \t\t\t}\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method setOpacity(opacity: Number): this\r\n  \t// Changes the opacity of the marker.\r\n  \tsetOpacity: function (opacity) {\r\n  \t\tthis.options.opacity = opacity;\r\n  \t\tif (this._map) {\r\n  \t\t\tthis._updateOpacity();\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t_updateOpacity: function () {\r\n  \t\tvar opacity = this.options.opacity;\r\n\r\n  \t\tif (this._icon) {\r\n  \t\t\tsetOpacity(this._icon, opacity);\r\n  \t\t}\r\n\r\n  \t\tif (this._shadow) {\r\n  \t\t\tsetOpacity(this._shadow, opacity);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_bringToFront: function () {\r\n  \t\tthis._updateZIndex(this.options.riseOffset);\r\n  \t},\r\n\r\n  \t_resetZIndex: function () {\r\n  \t\tthis._updateZIndex(0);\r\n  \t},\r\n\r\n  \t_panOnFocus: function () {\r\n  \t\tvar map = this._map;\r\n  \t\tif (!map) { return; }\r\n\r\n  \t\tvar iconOpts = this.options.icon.options;\r\n  \t\tvar size = iconOpts.iconSize ? toPoint(iconOpts.iconSize) : toPoint(0, 0);\r\n  \t\tvar anchor = iconOpts.iconAnchor ? toPoint(iconOpts.iconAnchor) : toPoint(0, 0);\r\n\r\n  \t\tmap.panInside(this._latlng, {\r\n  \t\t\tpaddingTopLeft: anchor,\r\n  \t\t\tpaddingBottomRight: size.subtract(anchor)\r\n  \t\t});\r\n  \t},\r\n\r\n  \t_getPopupAnchor: function () {\r\n  \t\treturn this.options.icon.options.popupAnchor;\r\n  \t},\r\n\r\n  \t_getTooltipAnchor: function () {\r\n  \t\treturn this.options.icon.options.tooltipAnchor;\r\n  \t}\r\n  });\r\n\r\n\r\n  // factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n  // @factory L.marker(latlng: LatLng, options? : Marker options)\r\n  // Instantiates a Marker object given a geographical point and optionally an options object.\r\n  function marker(latlng, options) {\r\n  \treturn new Marker(latlng, options);\r\n  }\n\n  /*\n   * @class Path\n   * @aka L.Path\n   * @inherits Interactive layer\n   *\n   * An abstract class that contains options and constants shared between vector\n   * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n   */\n\n  var Path = Layer.extend({\n\n  \t// @section\n  \t// @aka Path options\n  \toptions: {\n  \t\t// @option stroke: Boolean = true\n  \t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n  \t\tstroke: true,\n\n  \t\t// @option color: String = '#3388ff'\n  \t\t// Stroke color\n  \t\tcolor: '#3388ff',\n\n  \t\t// @option weight: Number = 3\n  \t\t// Stroke width in pixels\n  \t\tweight: 3,\n\n  \t\t// @option opacity: Number = 1.0\n  \t\t// Stroke opacity\n  \t\topacity: 1,\n\n  \t\t// @option lineCap: String= 'round'\n  \t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n  \t\tlineCap: 'round',\n\n  \t\t// @option lineJoin: String = 'round'\n  \t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n  \t\tlineJoin: 'round',\n\n  \t\t// @option dashArray: String = null\n  \t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n  \t\tdashArray: null,\n\n  \t\t// @option dashOffset: String = null\n  \t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n  \t\tdashOffset: null,\n\n  \t\t// @option fill: Boolean = depends\n  \t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n  \t\tfill: false,\n\n  \t\t// @option fillColor: String = *\n  \t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n  \t\tfillColor: null,\n\n  \t\t// @option fillOpacity: Number = 0.2\n  \t\t// Fill opacity.\n  \t\tfillOpacity: 0.2,\n\n  \t\t// @option fillRule: String = 'evenodd'\n  \t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n  \t\tfillRule: 'evenodd',\n\n  \t\t// className: '',\n\n  \t\t// Option inherited from \"Interactive layer\" abstract class\n  \t\tinteractive: true,\n\n  \t\t// @option bubblingMouseEvents: Boolean = true\n  \t\t// When `true`, a mouse event on this path will trigger the same event on the map\n  \t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n  \t\tbubblingMouseEvents: true\n  \t},\n\n  \tbeforeAdd: function (map) {\n  \t\t// Renderer is set here because we need to call renderer.getEvents\n  \t\t// before this.getEvents.\n  \t\tthis._renderer = map.getRenderer(this);\n  \t},\n\n  \tonAdd: function () {\n  \t\tthis._renderer._initPath(this);\n  \t\tthis._reset();\n  \t\tthis._renderer._addPath(this);\n  \t},\n\n  \tonRemove: function () {\n  \t\tthis._renderer._removePath(this);\n  \t},\n\n  \t// @method redraw(): this\n  \t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n  \tredraw: function () {\n  \t\tif (this._map) {\n  \t\t\tthis._renderer._updatePath(this);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method setStyle(style: Path options): this\n  \t// Changes the appearance of a Path based on the options in the `Path options` object.\n  \tsetStyle: function (style) {\n  \t\tsetOptions(this, style);\n  \t\tif (this._renderer) {\n  \t\t\tthis._renderer._updateStyle(this);\n  \t\t\tif (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n  \t\t\t\tthis._updateBounds();\n  \t\t\t}\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method bringToFront(): this\n  \t// Brings the layer to the top of all path layers.\n  \tbringToFront: function () {\n  \t\tif (this._renderer) {\n  \t\t\tthis._renderer._bringToFront(this);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method bringToBack(): this\n  \t// Brings the layer to the bottom of all path layers.\n  \tbringToBack: function () {\n  \t\tif (this._renderer) {\n  \t\t\tthis._renderer._bringToBack(this);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \tgetElement: function () {\n  \t\treturn this._path;\n  \t},\n\n  \t_reset: function () {\n  \t\t// defined in child classes\n  \t\tthis._project();\n  \t\tthis._update();\n  \t},\n\n  \t_clickTolerance: function () {\n  \t\t// used when doing hit detection for Canvas layers\n  \t\treturn (this.options.stroke ? this.options.weight / 2 : 0) +\n  \t\t  (this._renderer.options.tolerance || 0);\n  \t}\n  });\n\n  /*\n   * @class CircleMarker\n   * @aka L.CircleMarker\n   * @inherits Path\n   *\n   * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n   */\n\n  var CircleMarker = Path.extend({\n\n  \t// @section\n  \t// @aka CircleMarker options\n  \toptions: {\n  \t\tfill: true,\n\n  \t\t// @option radius: Number = 10\n  \t\t// Radius of the circle marker, in pixels\n  \t\tradius: 10\n  \t},\n\n  \tinitialize: function (latlng, options) {\n  \t\tsetOptions(this, options);\n  \t\tthis._latlng = toLatLng(latlng);\n  \t\tthis._radius = this.options.radius;\n  \t},\n\n  \t// @method setLatLng(latLng: LatLng): this\n  \t// Sets the position of a circle marker to a new location.\n  \tsetLatLng: function (latlng) {\n  \t\tvar oldLatLng = this._latlng;\n  \t\tthis._latlng = toLatLng(latlng);\n  \t\tthis.redraw();\n\n  \t\t// @event move: Event\n  \t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n  \t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n  \t},\n\n  \t// @method getLatLng(): LatLng\n  \t// Returns the current geographical position of the circle marker\n  \tgetLatLng: function () {\n  \t\treturn this._latlng;\n  \t},\n\n  \t// @method setRadius(radius: Number): this\n  \t// Sets the radius of a circle marker. Units are in pixels.\n  \tsetRadius: function (radius) {\n  \t\tthis.options.radius = this._radius = radius;\n  \t\treturn this.redraw();\n  \t},\n\n  \t// @method getRadius(): Number\n  \t// Returns the current radius of the circle\n  \tgetRadius: function () {\n  \t\treturn this._radius;\n  \t},\n\n  \tsetStyle : function (options) {\n  \t\tvar radius = options && options.radius || this._radius;\n  \t\tPath.prototype.setStyle.call(this, options);\n  \t\tthis.setRadius(radius);\n  \t\treturn this;\n  \t},\n\n  \t_project: function () {\n  \t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n  \t\tthis._updateBounds();\n  \t},\n\n  \t_updateBounds: function () {\n  \t\tvar r = this._radius,\n  \t\t    r2 = this._radiusY || r,\n  \t\t    w = this._clickTolerance(),\n  \t\t    p = [r + w, r2 + w];\n  \t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n  \t},\n\n  \t_update: function () {\n  \t\tif (this._map) {\n  \t\t\tthis._updatePath();\n  \t\t}\n  \t},\n\n  \t_updatePath: function () {\n  \t\tthis._renderer._updateCircle(this);\n  \t},\n\n  \t_empty: function () {\n  \t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n  \t},\n\n  \t// Needed by the `Canvas` renderer for interactivity\n  \t_containsPoint: function (p) {\n  \t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n  \t}\n  });\n\n\n  // @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n  // Instantiates a circle marker object given a geographical point, and an optional options object.\n  function circleMarker(latlng, options) {\n  \treturn new CircleMarker(latlng, options);\n  }\n\n  /*\n   * @class Circle\n   * @aka L.Circle\n   * @inherits CircleMarker\n   *\n   * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n   *\n   * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n   *\n   * @example\n   *\n   * ```js\n   * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n   * ```\n   */\n\n  var Circle = CircleMarker.extend({\n\n  \tinitialize: function (latlng, options, legacyOptions) {\n  \t\tif (typeof options === 'number') {\n  \t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n  \t\t\toptions = extend({}, legacyOptions, {radius: options});\n  \t\t}\n  \t\tsetOptions(this, options);\n  \t\tthis._latlng = toLatLng(latlng);\n\n  \t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n  \t\t// @section\n  \t\t// @aka Circle options\n  \t\t// @option radius: Number; Radius of the circle, in meters.\n  \t\tthis._mRadius = this.options.radius;\n  \t},\n\n  \t// @method setRadius(radius: Number): this\n  \t// Sets the radius of a circle. Units are in meters.\n  \tsetRadius: function (radius) {\n  \t\tthis._mRadius = radius;\n  \t\treturn this.redraw();\n  \t},\n\n  \t// @method getRadius(): Number\n  \t// Returns the current radius of a circle. Units are in meters.\n  \tgetRadius: function () {\n  \t\treturn this._mRadius;\n  \t},\n\n  \t// @method getBounds(): LatLngBounds\n  \t// Returns the `LatLngBounds` of the path.\n  \tgetBounds: function () {\n  \t\tvar half = [this._radius, this._radiusY || this._radius];\n\n  \t\treturn new LatLngBounds(\n  \t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n  \t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n  \t},\n\n  \tsetStyle: Path.prototype.setStyle,\n\n  \t_project: function () {\n\n  \t\tvar lng = this._latlng.lng,\n  \t\t    lat = this._latlng.lat,\n  \t\t    map = this._map,\n  \t\t    crs = map.options.crs;\n\n  \t\tif (crs.distance === Earth.distance) {\n  \t\t\tvar d = Math.PI / 180,\n  \t\t\t    latR = (this._mRadius / Earth.R) / d,\n  \t\t\t    top = map.project([lat + latR, lng]),\n  \t\t\t    bottom = map.project([lat - latR, lng]),\n  \t\t\t    p = top.add(bottom).divideBy(2),\n  \t\t\t    lat2 = map.unproject(p).lat,\n  \t\t\t    lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n  \t\t\t            (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n  \t\t\tif (isNaN(lngR) || lngR === 0) {\n  \t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n  \t\t\t}\n\n  \t\t\tthis._point = p.subtract(map.getPixelOrigin());\n  \t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n  \t\t\tthis._radiusY = p.y - top.y;\n\n  \t\t} else {\n  \t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n  \t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n  \t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n  \t\t}\n\n  \t\tthis._updateBounds();\n  \t}\n  });\n\n  // @factory L.circle(latlng: LatLng, options?: Circle options)\n  // Instantiates a circle object given a geographical point, and an options object\n  // which contains the circle radius.\n  // @alternative\n  // @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n  // Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n  // Do not use in new applications or plugins.\n  function circle(latlng, options, legacyOptions) {\n  \treturn new Circle(latlng, options, legacyOptions);\n  }\n\n  /*\n   * @class Polyline\n   * @aka L.Polyline\n   * @inherits Path\n   *\n   * A class for drawing polyline overlays on a map. Extends `Path`.\n   *\n   * @example\n   *\n   * ```js\n   * // create a red polyline from an array of LatLng points\n   * var latlngs = [\n   * \t[45.51, -122.68],\n   * \t[37.77, -122.43],\n   * \t[34.04, -118.2]\n   * ];\n   *\n   * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n   *\n   * // zoom the map to the polyline\n   * map.fitBounds(polyline.getBounds());\n   * ```\n   *\n   * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n   *\n   * ```js\n   * // create a red polyline from an array of arrays of LatLng points\n   * var latlngs = [\n   * \t[[45.51, -122.68],\n   * \t [37.77, -122.43],\n   * \t [34.04, -118.2]],\n   * \t[[40.78, -73.91],\n   * \t [41.83, -87.62],\n   * \t [32.76, -96.72]]\n   * ];\n   * ```\n   */\n\n\n  var Polyline = Path.extend({\n\n  \t// @section\n  \t// @aka Polyline options\n  \toptions: {\n  \t\t// @option smoothFactor: Number = 1.0\n  \t\t// How much to simplify the polyline on each zoom level. More means\n  \t\t// better performance and smoother look, and less means more accurate representation.\n  \t\tsmoothFactor: 1.0,\n\n  \t\t// @option noClip: Boolean = false\n  \t\t// Disable polyline clipping.\n  \t\tnoClip: false\n  \t},\n\n  \tinitialize: function (latlngs, options) {\n  \t\tsetOptions(this, options);\n  \t\tthis._setLatLngs(latlngs);\n  \t},\n\n  \t// @method getLatLngs(): LatLng[]\n  \t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n  \tgetLatLngs: function () {\n  \t\treturn this._latlngs;\n  \t},\n\n  \t// @method setLatLngs(latlngs: LatLng[]): this\n  \t// Replaces all the points in the polyline with the given array of geographical points.\n  \tsetLatLngs: function (latlngs) {\n  \t\tthis._setLatLngs(latlngs);\n  \t\treturn this.redraw();\n  \t},\n\n  \t// @method isEmpty(): Boolean\n  \t// Returns `true` if the Polyline has no LatLngs.\n  \tisEmpty: function () {\n  \t\treturn !this._latlngs.length;\n  \t},\n\n  \t// @method closestLayerPoint(p: Point): Point\n  \t// Returns the point closest to `p` on the Polyline.\n  \tclosestLayerPoint: function (p) {\n  \t\tvar minDistance = Infinity,\n  \t\t    minPoint = null,\n  \t\t    closest = _sqClosestPointOnSegment,\n  \t\t    p1, p2;\n\n  \t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n  \t\t\tvar points = this._parts[j];\n\n  \t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n  \t\t\t\tp1 = points[i - 1];\n  \t\t\t\tp2 = points[i];\n\n  \t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n  \t\t\t\tif (sqDist < minDistance) {\n  \t\t\t\t\tminDistance = sqDist;\n  \t\t\t\t\tminPoint = closest(p, p1, p2);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t\tif (minPoint) {\n  \t\t\tminPoint.distance = Math.sqrt(minDistance);\n  \t\t}\n  \t\treturn minPoint;\n  \t},\n\n  \t// @method getCenter(): LatLng\n  \t// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.\n  \tgetCenter: function () {\n  \t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n  \t\tif (!this._map) {\n  \t\t\tthrow new Error('Must add layer to map before using getCenter()');\n  \t\t}\n  \t\treturn polylineCenter(this._defaultShape(), this._map.options.crs);\n  \t},\n\n  \t// @method getBounds(): LatLngBounds\n  \t// Returns the `LatLngBounds` of the path.\n  \tgetBounds: function () {\n  \t\treturn this._bounds;\n  \t},\n\n  \t// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n  \t// Adds a given point to the polyline. By default, adds to the first ring of\n  \t// the polyline in case of a multi-polyline, but can be overridden by passing\n  \t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n  \taddLatLng: function (latlng, latlngs) {\n  \t\tlatlngs = latlngs || this._defaultShape();\n  \t\tlatlng = toLatLng(latlng);\n  \t\tlatlngs.push(latlng);\n  \t\tthis._bounds.extend(latlng);\n  \t\treturn this.redraw();\n  \t},\n\n  \t_setLatLngs: function (latlngs) {\n  \t\tthis._bounds = new LatLngBounds();\n  \t\tthis._latlngs = this._convertLatLngs(latlngs);\n  \t},\n\n  \t_defaultShape: function () {\n  \t\treturn isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n  \t},\n\n  \t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n  \t_convertLatLngs: function (latlngs) {\n  \t\tvar result = [],\n  \t\t    flat = isFlat(latlngs);\n\n  \t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n  \t\t\tif (flat) {\n  \t\t\t\tresult[i] = toLatLng(latlngs[i]);\n  \t\t\t\tthis._bounds.extend(result[i]);\n  \t\t\t} else {\n  \t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n  \t\t\t}\n  \t\t}\n\n  \t\treturn result;\n  \t},\n\n  \t_project: function () {\n  \t\tvar pxBounds = new Bounds();\n  \t\tthis._rings = [];\n  \t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n  \t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n  \t\t\tthis._rawPxBounds = pxBounds;\n  \t\t\tthis._updateBounds();\n  \t\t}\n  \t},\n\n  \t_updateBounds: function () {\n  \t\tvar w = this._clickTolerance(),\n  \t\t    p = new Point(w, w);\n\n  \t\tif (!this._rawPxBounds) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tthis._pxBounds = new Bounds([\n  \t\t\tthis._rawPxBounds.min.subtract(p),\n  \t\t\tthis._rawPxBounds.max.add(p)\n  \t\t]);\n  \t},\n\n  \t// recursively turns latlngs into a set of rings with projected coordinates\n  \t_projectLatlngs: function (latlngs, result, projectedBounds) {\n  \t\tvar flat = latlngs[0] instanceof LatLng,\n  \t\t    len = latlngs.length,\n  \t\t    i, ring;\n\n  \t\tif (flat) {\n  \t\t\tring = [];\n  \t\t\tfor (i = 0; i < len; i++) {\n  \t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n  \t\t\t\tprojectedBounds.extend(ring[i]);\n  \t\t\t}\n  \t\t\tresult.push(ring);\n  \t\t} else {\n  \t\t\tfor (i = 0; i < len; i++) {\n  \t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \t// clip polyline by renderer bounds so that we have less to render for performance\n  \t_clipPoints: function () {\n  \t\tvar bounds = this._renderer._bounds;\n\n  \t\tthis._parts = [];\n  \t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tif (this.options.noClip) {\n  \t\t\tthis._parts = this._rings;\n  \t\t\treturn;\n  \t\t}\n\n  \t\tvar parts = this._parts,\n  \t\t    i, j, k, len, len2, segment, points;\n\n  \t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n  \t\t\tpoints = this._rings[i];\n\n  \t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n  \t\t\t\tsegment = clipSegment(points[j], points[j + 1], bounds, j, true);\n\n  \t\t\t\tif (!segment) { continue; }\n\n  \t\t\t\tparts[k] = parts[k] || [];\n  \t\t\t\tparts[k].push(segment[0]);\n\n  \t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n  \t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n  \t\t\t\t\tparts[k].push(segment[1]);\n  \t\t\t\t\tk++;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \t// simplify each clipped part of the polyline for performance\n  \t_simplifyPoints: function () {\n  \t\tvar parts = this._parts,\n  \t\t    tolerance = this.options.smoothFactor;\n\n  \t\tfor (var i = 0, len = parts.length; i < len; i++) {\n  \t\t\tparts[i] = simplify(parts[i], tolerance);\n  \t\t}\n  \t},\n\n  \t_update: function () {\n  \t\tif (!this._map) { return; }\n\n  \t\tthis._clipPoints();\n  \t\tthis._simplifyPoints();\n  \t\tthis._updatePath();\n  \t},\n\n  \t_updatePath: function () {\n  \t\tthis._renderer._updatePoly(this);\n  \t},\n\n  \t// Needed by the `Canvas` renderer for interactivity\n  \t_containsPoint: function (p, closed) {\n  \t\tvar i, j, k, len, len2, part,\n  \t\t    w = this._clickTolerance();\n\n  \t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n  \t\t// hit detection for polylines\n  \t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n  \t\t\tpart = this._parts[i];\n\n  \t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n  \t\t\t\tif (!closed && (j === 0)) { continue; }\n\n  \t\t\t\tif (pointToSegmentDistance(p, part[k], part[j]) <= w) {\n  \t\t\t\t\treturn true;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t\treturn false;\n  \t}\n  });\n\n  // @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n  // Instantiates a polyline object given an array of geographical points and\n  // optionally an options object. You can create a `Polyline` object with\n  // multiple separate lines (`MultiPolyline`) by passing an array of arrays\n  // of geographic points.\n  function polyline(latlngs, options) {\n  \treturn new Polyline(latlngs, options);\n  }\n\n  // Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\n  Polyline._flat = _flat;\n\n  /*\n   * @class Polygon\n   * @aka L.Polygon\n   * @inherits Polyline\n   *\n   * A class for drawing polygon overlays on a map. Extends `Polyline`.\n   *\n   * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n   *\n   *\n   * @example\n   *\n   * ```js\n   * // create a red polygon from an array of LatLng points\n   * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n   *\n   * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n   *\n   * // zoom the map to the polygon\n   * map.fitBounds(polygon.getBounds());\n   * ```\n   *\n   * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n   *\n   * ```js\n   * var latlngs = [\n   *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n   *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n   * ];\n   * ```\n   *\n   * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n   *\n   * ```js\n   * var latlngs = [\n   *   [ // first polygon\n   *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n   *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n   *   ],\n   *   [ // second polygon\n   *     [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n   *   ]\n   * ];\n   * ```\n   */\n\n  var Polygon = Polyline.extend({\n\n  \toptions: {\n  \t\tfill: true\n  \t},\n\n  \tisEmpty: function () {\n  \t\treturn !this._latlngs.length || !this._latlngs[0].length;\n  \t},\n\n  \t// @method getCenter(): LatLng\n  \t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.\n  \tgetCenter: function () {\n  \t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n  \t\tif (!this._map) {\n  \t\t\tthrow new Error('Must add layer to map before using getCenter()');\n  \t\t}\n  \t\treturn polygonCenter(this._defaultShape(), this._map.options.crs);\n  \t},\n\n  \t_convertLatLngs: function (latlngs) {\n  \t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n  \t\t    len = result.length;\n\n  \t\t// remove last point if it equals first one\n  \t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n  \t\t\tresult.pop();\n  \t\t}\n  \t\treturn result;\n  \t},\n\n  \t_setLatLngs: function (latlngs) {\n  \t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n  \t\tif (isFlat(this._latlngs)) {\n  \t\t\tthis._latlngs = [this._latlngs];\n  \t\t}\n  \t},\n\n  \t_defaultShape: function () {\n  \t\treturn isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n  \t},\n\n  \t_clipPoints: function () {\n  \t\t// polygons need a different clipping algorithm so we redefine that\n\n  \t\tvar bounds = this._renderer._bounds,\n  \t\t    w = this.options.weight,\n  \t\t    p = new Point(w, w);\n\n  \t\t// increase clip padding by stroke width to avoid stroke on clip edges\n  \t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n  \t\tthis._parts = [];\n  \t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tif (this.options.noClip) {\n  \t\t\tthis._parts = this._rings;\n  \t\t\treturn;\n  \t\t}\n\n  \t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n  \t\t\tclipped = clipPolygon(this._rings[i], bounds, true);\n  \t\t\tif (clipped.length) {\n  \t\t\t\tthis._parts.push(clipped);\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \t_updatePath: function () {\n  \t\tthis._renderer._updatePoly(this, true);\n  \t},\n\n  \t// Needed by the `Canvas` renderer for interactivity\n  \t_containsPoint: function (p) {\n  \t\tvar inside = false,\n  \t\t    part, p1, p2, i, j, k, len, len2;\n\n  \t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n  \t\t// ray casting algorithm for detecting if point is in polygon\n  \t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n  \t\t\tpart = this._parts[i];\n\n  \t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n  \t\t\t\tp1 = part[j];\n  \t\t\t\tp2 = part[k];\n\n  \t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n  \t\t\t\t\tinside = !inside;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\t// also check if it's on polygon stroke\n  \t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n  \t}\n\n  });\n\n\n  // @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\n  function polygon(latlngs, options) {\n  \treturn new Polygon(latlngs, options);\n  }\n\n  /*\r\n   * @class GeoJSON\r\n   * @aka L.GeoJSON\r\n   * @inherits FeatureGroup\r\n   *\r\n   * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n   * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * L.geoJSON(data, {\r\n   * \tstyle: function (feature) {\r\n   * \t\treturn {color: feature.properties.color};\r\n   * \t}\r\n   * }).bindPopup(function (layer) {\r\n   * \treturn layer.feature.properties.description;\r\n   * }).addTo(map);\r\n   * ```\r\n   */\r\n\r\n  var GeoJSON = FeatureGroup.extend({\r\n\r\n  \t/* @section\r\n  \t * @aka GeoJSON options\r\n  \t *\r\n  \t * @option pointToLayer: Function = *\r\n  \t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n  \t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n  \t * The default is to spawn a default `Marker`:\r\n  \t * ```js\r\n  \t * function(geoJsonPoint, latlng) {\r\n  \t * \treturn L.marker(latlng);\r\n  \t * }\r\n  \t * ```\r\n  \t *\r\n  \t * @option style: Function = *\r\n  \t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n  \t * called internally when data is added.\r\n  \t * The default value is to not override any defaults:\r\n  \t * ```js\r\n  \t * function (geoJsonFeature) {\r\n  \t * \treturn {}\r\n  \t * }\r\n  \t * ```\r\n  \t *\r\n  \t * @option onEachFeature: Function = *\r\n  \t * A `Function` that will be called once for each created `Feature`, after it has\r\n  \t * been created and styled. Useful for attaching events and popups to features.\r\n  \t * The default is to do nothing with the newly created layers:\r\n  \t * ```js\r\n  \t * function (feature, layer) {}\r\n  \t * ```\r\n  \t *\r\n  \t * @option filter: Function = *\r\n  \t * A `Function` that will be used to decide whether to include a feature or not.\r\n  \t * The default is to include all features:\r\n  \t * ```js\r\n  \t * function (geoJsonFeature) {\r\n  \t * \treturn true;\r\n  \t * }\r\n  \t * ```\r\n  \t * Note: dynamically changing the `filter` option will have effect only on newly\r\n  \t * added data. It will _not_ re-evaluate already included features.\r\n  \t *\r\n  \t * @option coordsToLatLng: Function = *\r\n  \t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n  \t * The default is the `coordsToLatLng` static method.\r\n  \t *\r\n  \t * @option markersInheritOptions: Boolean = false\r\n  \t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n  \t */\r\n\r\n  \tinitialize: function (geojson, options) {\r\n  \t\tsetOptions(this, options);\r\n\r\n  \t\tthis._layers = {};\r\n\r\n  \t\tif (geojson) {\r\n  \t\t\tthis.addData(geojson);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method addData( <GeoJSON> data ): this\r\n  \t// Adds a GeoJSON object to the layer.\r\n  \taddData: function (geojson) {\r\n  \t\tvar features = isArray(geojson) ? geojson : geojson.features,\r\n  \t\t    i, len, feature;\r\n\r\n  \t\tif (features) {\r\n  \t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n  \t\t\t\t// only add this if geometry or geometries are set and not null\r\n  \t\t\t\tfeature = features[i];\r\n  \t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n  \t\t\t\t\tthis.addData(feature);\r\n  \t\t\t\t}\r\n  \t\t\t}\r\n  \t\t\treturn this;\r\n  \t\t}\r\n\r\n  \t\tvar options = this.options;\r\n\r\n  \t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n  \t\tvar layer = geometryToLayer(geojson, options);\r\n  \t\tif (!layer) {\r\n  \t\t\treturn this;\r\n  \t\t}\r\n  \t\tlayer.feature = asFeature(geojson);\r\n\r\n  \t\tlayer.defaultOptions = layer.options;\r\n  \t\tthis.resetStyle(layer);\r\n\r\n  \t\tif (options.onEachFeature) {\r\n  \t\t\toptions.onEachFeature(geojson, layer);\r\n  \t\t}\r\n\r\n  \t\treturn this.addLayer(layer);\r\n  \t},\r\n\r\n  \t// @method resetStyle( <Path> layer? ): this\r\n  \t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n  \t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n  \tresetStyle: function (layer) {\r\n  \t\tif (layer === undefined) {\r\n  \t\t\treturn this.eachLayer(this.resetStyle, this);\r\n  \t\t}\r\n  \t\t// reset any custom styles\r\n  \t\tlayer.options = extend({}, layer.defaultOptions);\r\n  \t\tthis._setLayerStyle(layer, this.options.style);\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method setStyle( <Function> style ): this\r\n  \t// Changes styles of GeoJSON vector layers with the given style function.\r\n  \tsetStyle: function (style) {\r\n  \t\treturn this.eachLayer(function (layer) {\r\n  \t\t\tthis._setLayerStyle(layer, style);\r\n  \t\t}, this);\r\n  \t},\r\n\r\n  \t_setLayerStyle: function (layer, style) {\r\n  \t\tif (layer.setStyle) {\r\n  \t\t\tif (typeof style === 'function') {\r\n  \t\t\t\tstyle = style(layer.feature);\r\n  \t\t\t}\r\n  \t\t\tlayer.setStyle(style);\r\n  \t\t}\r\n  \t}\r\n  });\r\n\r\n  // @section\r\n  // There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n  // @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n  // Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n  // [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n  // functions if provided as options.\r\n  function geometryToLayer(geojson, options) {\r\n\r\n  \tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n  \t    coords = geometry ? geometry.coordinates : null,\r\n  \t    layers = [],\r\n  \t    pointToLayer = options && options.pointToLayer,\r\n  \t    _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n  \t    latlng, latlngs, i, len;\r\n\r\n  \tif (!coords && !geometry) {\r\n  \t\treturn null;\r\n  \t}\r\n\r\n  \tswitch (geometry.type) {\r\n  \tcase 'Point':\r\n  \t\tlatlng = _coordsToLatLng(coords);\r\n  \t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n  \tcase 'MultiPoint':\r\n  \t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n  \t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n  \t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n  \t\t}\r\n  \t\treturn new FeatureGroup(layers);\r\n\r\n  \tcase 'LineString':\r\n  \tcase 'MultiLineString':\r\n  \t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n  \t\treturn new Polyline(latlngs, options);\r\n\r\n  \tcase 'Polygon':\r\n  \tcase 'MultiPolygon':\r\n  \t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n  \t\treturn new Polygon(latlngs, options);\r\n\r\n  \tcase 'GeometryCollection':\r\n  \t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n  \t\t\tvar geoLayer = geometryToLayer({\r\n  \t\t\t\tgeometry: geometry.geometries[i],\r\n  \t\t\t\ttype: 'Feature',\r\n  \t\t\t\tproperties: geojson.properties\r\n  \t\t\t}, options);\r\n\r\n  \t\t\tif (geoLayer) {\r\n  \t\t\t\tlayers.push(geoLayer);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t\treturn new FeatureGroup(layers);\r\n\r\n  \tcase 'FeatureCollection':\r\n  \t\tfor (i = 0, len = geometry.features.length; i < len; i++) {\r\n  \t\t\tvar featureLayer = geometryToLayer(geometry.features[i], options);\r\n\r\n  \t\t\tif (featureLayer) {\r\n  \t\t\t\tlayers.push(featureLayer);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t\treturn new FeatureGroup(layers);\r\n\r\n  \tdefault:\r\n  \t\tthrow new Error('Invalid GeoJSON object.');\r\n  \t}\r\n  }\r\n\r\n  function _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n  \treturn pointToLayerFn ?\r\n  \t\tpointToLayerFn(geojson, latlng) :\r\n  \t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n  }\r\n\r\n  // @function coordsToLatLng(coords: Array): LatLng\r\n  // Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n  // or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\n  function coordsToLatLng(coords) {\r\n  \treturn new LatLng(coords[1], coords[0], coords[2]);\r\n  }\r\n\r\n  // @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n  // Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n  // `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n  // Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\n  function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n  \tvar latlngs = [];\r\n\r\n  \tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n  \t\tlatlng = levelsDeep ?\r\n  \t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n  \t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n  \t\tlatlngs.push(latlng);\r\n  \t}\r\n\r\n  \treturn latlngs;\r\n  }\r\n\r\n  // @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array\r\n  // Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\n  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\n  function latLngToCoords(latlng, precision) {\r\n  \tlatlng = toLatLng(latlng);\r\n  \treturn latlng.alt !== undefined ?\r\n  \t\t[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision), formatNum(latlng.alt, precision)] :\r\n  \t\t[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision)];\r\n  }\r\n\r\n  // @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array\r\n  // Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n  // `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\n  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\n  function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n  \tvar coords = [];\r\n\r\n  \tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n  \t\t// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion\r\n  \t\tcoords.push(levelsDeep ?\r\n  \t\t\tlatLngsToCoords(latlngs[i], isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :\r\n  \t\t\tlatLngToCoords(latlngs[i], precision));\r\n  \t}\r\n\r\n  \tif (!levelsDeep && closed) {\r\n  \t\tcoords.push(coords[0]);\r\n  \t}\r\n\r\n  \treturn coords;\r\n  }\r\n\r\n  function getFeature(layer, newGeometry) {\r\n  \treturn layer.feature ?\r\n  \t\textend({}, layer.feature, {geometry: newGeometry}) :\r\n  \t\tasFeature(newGeometry);\r\n  }\r\n\r\n  // @function asFeature(geojson: Object): Object\r\n  // Normalize GeoJSON geometries/features into GeoJSON features.\r\n  function asFeature(geojson) {\r\n  \tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n  \t\treturn geojson;\r\n  \t}\r\n\r\n  \treturn {\r\n  \t\ttype: 'Feature',\r\n  \t\tproperties: {},\r\n  \t\tgeometry: geojson\r\n  \t};\r\n  }\r\n\r\n  var PointToGeoJSON = {\r\n  \ttoGeoJSON: function (precision) {\r\n  \t\treturn getFeature(this, {\r\n  \t\t\ttype: 'Point',\r\n  \t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n  \t\t});\r\n  \t}\r\n  };\r\n\r\n  // @namespace Marker\r\n  // @section Other methods\r\n  // @method toGeoJSON(precision?: Number|false): Object\r\n  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\n  Marker.include(PointToGeoJSON);\r\n\r\n  // @namespace CircleMarker\r\n  // @method toGeoJSON(precision?: Number|false): Object\r\n  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\n  Circle.include(PointToGeoJSON);\r\n  CircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n  // @namespace Polyline\r\n  // @method toGeoJSON(precision?: Number|false): Object\r\n  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\n  Polyline.include({\r\n  \ttoGeoJSON: function (precision) {\r\n  \t\tvar multi = !isFlat(this._latlngs);\r\n\r\n  \t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n  \t\treturn getFeature(this, {\r\n  \t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n  \t\t\tcoordinates: coords\r\n  \t\t});\r\n  \t}\r\n  });\r\n\r\n  // @namespace Polygon\r\n  // @method toGeoJSON(precision?: Number|false): Object\r\n  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\n  Polygon.include({\r\n  \ttoGeoJSON: function (precision) {\r\n  \t\tvar holes = !isFlat(this._latlngs),\r\n  \t\t    multi = holes && !isFlat(this._latlngs[0]);\r\n\r\n  \t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n  \t\tif (!holes) {\r\n  \t\t\tcoords = [coords];\r\n  \t\t}\r\n\r\n  \t\treturn getFeature(this, {\r\n  \t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n  \t\t\tcoordinates: coords\r\n  \t\t});\r\n  \t}\r\n  });\r\n\r\n\r\n  // @namespace LayerGroup\r\n  LayerGroup.include({\r\n  \ttoMultiPoint: function (precision) {\r\n  \t\tvar coords = [];\r\n\r\n  \t\tthis.eachLayer(function (layer) {\r\n  \t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n  \t\t});\r\n\r\n  \t\treturn getFeature(this, {\r\n  \t\t\ttype: 'MultiPoint',\r\n  \t\t\tcoordinates: coords\r\n  \t\t});\r\n  \t},\r\n\r\n  \t// @method toGeoJSON(precision?: Number|false): Object\r\n  \t// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n  \t// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n  \ttoGeoJSON: function (precision) {\r\n\r\n  \t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n  \t\tif (type === 'MultiPoint') {\r\n  \t\t\treturn this.toMultiPoint(precision);\r\n  \t\t}\r\n\r\n  \t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n  \t\t    jsons = [];\r\n\r\n  \t\tthis.eachLayer(function (layer) {\r\n  \t\t\tif (layer.toGeoJSON) {\r\n  \t\t\t\tvar json = layer.toGeoJSON(precision);\r\n  \t\t\t\tif (isGeometryCollection) {\r\n  \t\t\t\t\tjsons.push(json.geometry);\r\n  \t\t\t\t} else {\r\n  \t\t\t\t\tvar feature = asFeature(json);\r\n  \t\t\t\t\t// Squash nested feature collections\r\n  \t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n  \t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n  \t\t\t\t\t} else {\r\n  \t\t\t\t\t\tjsons.push(feature);\r\n  \t\t\t\t\t}\r\n  \t\t\t\t}\r\n  \t\t\t}\r\n  \t\t});\r\n\r\n  \t\tif (isGeometryCollection) {\r\n  \t\t\treturn getFeature(this, {\r\n  \t\t\t\tgeometries: jsons,\r\n  \t\t\t\ttype: 'GeometryCollection'\r\n  \t\t\t});\r\n  \t\t}\r\n\r\n  \t\treturn {\r\n  \t\t\ttype: 'FeatureCollection',\r\n  \t\t\tfeatures: jsons\r\n  \t\t};\r\n  \t}\r\n  });\r\n\r\n  // @namespace GeoJSON\r\n  // @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n  // Creates a GeoJSON layer. Optionally accepts an object in\r\n  // [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n  // (you can alternatively add it later with `addData` method) and an `options` object.\r\n  function geoJSON(geojson, options) {\r\n  \treturn new GeoJSON(geojson, options);\r\n  }\r\n\r\n  // Backward compatibility.\r\n  var geoJson = geoJSON;\n\n  /*\r\n   * @class ImageOverlay\r\n   * @aka L.ImageOverlay\r\n   * @inherits Interactive layer\r\n   *\r\n   * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n   * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n   * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n   * ```\r\n   */\r\n\r\n  var ImageOverlay = Layer.extend({\r\n\r\n  \t// @section\r\n  \t// @aka ImageOverlay options\r\n  \toptions: {\r\n  \t\t// @option opacity: Number = 1.0\r\n  \t\t// The opacity of the image overlay.\r\n  \t\topacity: 1,\r\n\r\n  \t\t// @option alt: String = ''\r\n  \t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n  \t\talt: '',\r\n\r\n  \t\t// @option interactive: Boolean = false\r\n  \t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n  \t\tinteractive: false,\r\n\r\n  \t\t// @option crossOrigin: Boolean|String = false\r\n  \t\t// Whether the crossOrigin attribute will be added to the image.\r\n  \t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n  \t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n  \t\tcrossOrigin: false,\r\n\r\n  \t\t// @option errorOverlayUrl: String = ''\r\n  \t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n  \t\terrorOverlayUrl: '',\r\n\r\n  \t\t// @option zIndex: Number = 1\r\n  \t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n  \t\tzIndex: 1,\r\n\r\n  \t\t// @option className: String = ''\r\n  \t\t// A custom class name to assign to the image. Empty by default.\r\n  \t\tclassName: ''\r\n  \t},\r\n\r\n  \tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n  \t\tthis._url = url;\r\n  \t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n  \t\tsetOptions(this, options);\r\n  \t},\r\n\r\n  \tonAdd: function () {\r\n  \t\tif (!this._image) {\r\n  \t\t\tthis._initImage();\r\n\r\n  \t\t\tif (this.options.opacity < 1) {\r\n  \t\t\t\tthis._updateOpacity();\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\tif (this.options.interactive) {\r\n  \t\t\taddClass(this._image, 'leaflet-interactive');\r\n  \t\t\tthis.addInteractiveTarget(this._image);\r\n  \t\t}\r\n\r\n  \t\tthis.getPane().appendChild(this._image);\r\n  \t\tthis._reset();\r\n  \t},\r\n\r\n  \tonRemove: function () {\r\n  \t\tremove(this._image);\r\n  \t\tif (this.options.interactive) {\r\n  \t\t\tthis.removeInteractiveTarget(this._image);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method setOpacity(opacity: Number): this\r\n  \t// Sets the opacity of the overlay.\r\n  \tsetOpacity: function (opacity) {\r\n  \t\tthis.options.opacity = opacity;\r\n\r\n  \t\tif (this._image) {\r\n  \t\t\tthis._updateOpacity();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \tsetStyle: function (styleOpts) {\r\n  \t\tif (styleOpts.opacity) {\r\n  \t\t\tthis.setOpacity(styleOpts.opacity);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method bringToFront(): this\r\n  \t// Brings the layer to the top of all overlays.\r\n  \tbringToFront: function () {\r\n  \t\tif (this._map) {\r\n  \t\t\ttoFront(this._image);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method bringToBack(): this\r\n  \t// Brings the layer to the bottom of all overlays.\r\n  \tbringToBack: function () {\r\n  \t\tif (this._map) {\r\n  \t\t\ttoBack(this._image);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method setUrl(url: String): this\r\n  \t// Changes the URL of the image.\r\n  \tsetUrl: function (url) {\r\n  \t\tthis._url = url;\r\n\r\n  \t\tif (this._image) {\r\n  \t\t\tthis._image.src = url;\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method setBounds(bounds: LatLngBounds): this\r\n  \t// Update the bounds that this ImageOverlay covers\r\n  \tsetBounds: function (bounds) {\r\n  \t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n  \t\tif (this._map) {\r\n  \t\t\tthis._reset();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \tgetEvents: function () {\r\n  \t\tvar events = {\r\n  \t\t\tzoom: this._reset,\r\n  \t\t\tviewreset: this._reset\r\n  \t\t};\r\n\r\n  \t\tif (this._zoomAnimated) {\r\n  \t\t\tevents.zoomanim = this._animateZoom;\r\n  \t\t}\r\n\r\n  \t\treturn events;\r\n  \t},\r\n\r\n  \t// @method setZIndex(value: Number): this\r\n  \t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n  \tsetZIndex: function (value) {\r\n  \t\tthis.options.zIndex = value;\r\n  \t\tthis._updateZIndex();\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method getBounds(): LatLngBounds\r\n  \t// Get the bounds that this ImageOverlay covers\r\n  \tgetBounds: function () {\r\n  \t\treturn this._bounds;\r\n  \t},\r\n\r\n  \t// @method getElement(): HTMLElement\r\n  \t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n  \t// used by this overlay.\r\n  \tgetElement: function () {\r\n  \t\treturn this._image;\r\n  \t},\r\n\r\n  \t_initImage: function () {\r\n  \t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n  \t\tvar img = this._image = wasElementSupplied ? this._url : create$1('img');\r\n\r\n  \t\taddClass(img, 'leaflet-image-layer');\r\n  \t\tif (this._zoomAnimated) { addClass(img, 'leaflet-zoom-animated'); }\r\n  \t\tif (this.options.className) { addClass(img, this.options.className); }\r\n\r\n  \t\timg.onselectstart = falseFn;\r\n  \t\timg.onmousemove = falseFn;\r\n\r\n  \t\t// @event load: Event\r\n  \t\t// Fired when the ImageOverlay layer has loaded its image\r\n  \t\timg.onload = bind(this.fire, this, 'load');\r\n  \t\timg.onerror = bind(this._overlayOnError, this, 'error');\r\n\r\n  \t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n  \t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n  \t\t}\r\n\r\n  \t\tif (this.options.zIndex) {\r\n  \t\t\tthis._updateZIndex();\r\n  \t\t}\r\n\r\n  \t\tif (wasElementSupplied) {\r\n  \t\t\tthis._url = img.src;\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\timg.src = this._url;\r\n  \t\timg.alt = this.options.alt;\r\n  \t},\r\n\r\n  \t_animateZoom: function (e) {\r\n  \t\tvar scale = this._map.getZoomScale(e.zoom),\r\n  \t\t    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n  \t\tsetTransform(this._image, offset, scale);\r\n  \t},\r\n\r\n  \t_reset: function () {\r\n  \t\tvar image = this._image,\r\n  \t\t    bounds = new Bounds(\r\n  \t\t        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n  \t\t        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n  \t\t    size = bounds.getSize();\r\n\r\n  \t\tsetPosition(image, bounds.min);\r\n\r\n  \t\timage.style.width  = size.x + 'px';\r\n  \t\timage.style.height = size.y + 'px';\r\n  \t},\r\n\r\n  \t_updateOpacity: function () {\r\n  \t\tsetOpacity(this._image, this.options.opacity);\r\n  \t},\r\n\r\n  \t_updateZIndex: function () {\r\n  \t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n  \t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_overlayOnError: function () {\r\n  \t\t// @event error: Event\r\n  \t\t// Fired when the ImageOverlay layer fails to load its image\r\n  \t\tthis.fire('error');\r\n\r\n  \t\tvar errorUrl = this.options.errorOverlayUrl;\r\n  \t\tif (errorUrl && this._url !== errorUrl) {\r\n  \t\t\tthis._url = errorUrl;\r\n  \t\t\tthis._image.src = errorUrl;\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method getCenter(): LatLng\r\n  \t// Returns the center of the ImageOverlay.\r\n  \tgetCenter: function () {\r\n  \t\treturn this._bounds.getCenter();\r\n  \t}\r\n  });\r\n\r\n  // @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n  // Instantiates an image overlay object given the URL of the image and the\r\n  // geographical bounds it is tied to.\r\n  var imageOverlay = function (url, bounds, options) {\r\n  \treturn new ImageOverlay(url, bounds, options);\r\n  };\n\n  /*\r\n   * @class VideoOverlay\r\n   * @aka L.VideoOverlay\r\n   * @inherits ImageOverlay\r\n   *\r\n   * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n   *\r\n   * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n   * HTML5 element.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n   * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n   * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n   * ```\r\n   */\r\n\r\n  var VideoOverlay = ImageOverlay.extend({\r\n\r\n  \t// @section\r\n  \t// @aka VideoOverlay options\r\n  \toptions: {\r\n  \t\t// @option autoplay: Boolean = true\r\n  \t\t// Whether the video starts playing automatically when loaded.\r\n  \t\t// On some browsers autoplay will only work with `muted: true`\r\n  \t\tautoplay: true,\r\n\r\n  \t\t// @option loop: Boolean = true\r\n  \t\t// Whether the video will loop back to the beginning when played.\r\n  \t\tloop: true,\r\n\r\n  \t\t// @option keepAspectRatio: Boolean = true\r\n  \t\t// Whether the video will save aspect ratio after the projection.\r\n  \t\t// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)\r\n  \t\tkeepAspectRatio: true,\r\n\r\n  \t\t// @option muted: Boolean = false\r\n  \t\t// Whether the video starts on mute when loaded.\r\n  \t\tmuted: false,\r\n\r\n  \t\t// @option playsInline: Boolean = true\r\n  \t\t// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.\r\n  \t\tplaysInline: true\r\n  \t},\r\n\r\n  \t_initImage: function () {\r\n  \t\tvar wasElementSupplied = this._url.tagName === 'VIDEO';\r\n  \t\tvar vid = this._image = wasElementSupplied ? this._url : create$1('video');\r\n\r\n  \t\taddClass(vid, 'leaflet-image-layer');\r\n  \t\tif (this._zoomAnimated) { addClass(vid, 'leaflet-zoom-animated'); }\r\n  \t\tif (this.options.className) { addClass(vid, this.options.className); }\r\n\r\n  \t\tvid.onselectstart = falseFn;\r\n  \t\tvid.onmousemove = falseFn;\r\n\r\n  \t\t// @event load: Event\r\n  \t\t// Fired when the video has finished loading the first frame\r\n  \t\tvid.onloadeddata = bind(this.fire, this, 'load');\r\n\r\n  \t\tif (wasElementSupplied) {\r\n  \t\t\tvar sourceElements = vid.getElementsByTagName('source');\r\n  \t\t\tvar sources = [];\r\n  \t\t\tfor (var j = 0; j < sourceElements.length; j++) {\r\n  \t\t\t\tsources.push(sourceElements[j].src);\r\n  \t\t\t}\r\n\r\n  \t\t\tthis._url = (sourceElements.length > 0) ? sources : [vid.src];\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\tif (!isArray(this._url)) { this._url = [this._url]; }\r\n\r\n  \t\tif (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {\r\n  \t\t\tvid.style['objectFit'] = 'fill';\r\n  \t\t}\r\n  \t\tvid.autoplay = !!this.options.autoplay;\r\n  \t\tvid.loop = !!this.options.loop;\r\n  \t\tvid.muted = !!this.options.muted;\r\n  \t\tvid.playsInline = !!this.options.playsInline;\r\n  \t\tfor (var i = 0; i < this._url.length; i++) {\r\n  \t\t\tvar source = create$1('source');\r\n  \t\t\tsource.src = this._url[i];\r\n  \t\t\tvid.appendChild(source);\r\n  \t\t}\r\n  \t}\r\n\r\n  \t// @method getElement(): HTMLVideoElement\r\n  \t// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\r\n  \t// used by this overlay.\r\n  });\r\n\r\n\r\n  // @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\r\n  // Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\r\n  // geographical bounds it is tied to.\r\n\r\n  function videoOverlay(video, bounds, options) {\r\n  \treturn new VideoOverlay(video, bounds, options);\r\n  }\n\n  /*\n   * @class SVGOverlay\n   * @aka L.SVGOverlay\n   * @inherits ImageOverlay\n   *\n   * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.\n   *\n   * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.\n   *\n   * @example\n   *\n   * ```js\n   * var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n   * svgElement.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n   * svgElement.setAttribute('viewBox', \"0 0 200 200\");\n   * svgElement.innerHTML = '<rect width=\"200\" height=\"200\"/><rect x=\"75\" y=\"23\" width=\"50\" height=\"50\" style=\"fill:red\"/><rect x=\"75\" y=\"123\" width=\"50\" height=\"50\" style=\"fill:#0013ff\"/>';\n   * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];\n   * L.svgOverlay(svgElement, svgElementBounds).addTo(map);\n   * ```\n   */\n\n  var SVGOverlay = ImageOverlay.extend({\n  \t_initImage: function () {\n  \t\tvar el = this._image = this._url;\n\n  \t\taddClass(el, 'leaflet-image-layer');\n  \t\tif (this._zoomAnimated) { addClass(el, 'leaflet-zoom-animated'); }\n  \t\tif (this.options.className) { addClass(el, this.options.className); }\n\n  \t\tel.onselectstart = falseFn;\n  \t\tel.onmousemove = falseFn;\n  \t}\n\n  \t// @method getElement(): SVGElement\n  \t// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)\n  \t// used by this overlay.\n  });\n\n\n  // @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)\n  // Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.\n  // A viewBox attribute is required on the SVG element to zoom in and out properly.\n\n  function svgOverlay(el, bounds, options) {\n  \treturn new SVGOverlay(el, bounds, options);\n  }\n\n  /*\r\n   * @class DivOverlay\r\n   * @inherits Interactive layer\r\n   * @aka L.DivOverlay\r\n   * Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.\r\n   */\r\n\r\n  // @namespace DivOverlay\r\n  var DivOverlay = Layer.extend({\r\n\r\n  \t// @section\r\n  \t// @aka DivOverlay options\r\n  \toptions: {\r\n  \t\t// @option interactive: Boolean = false\r\n  \t\t// If true, the popup/tooltip will listen to the mouse events.\r\n  \t\tinteractive: false,\r\n\r\n  \t\t// @option offset: Point = Point(0, 0)\r\n  \t\t// The offset of the overlay position.\r\n  \t\toffset: [0, 0],\r\n\r\n  \t\t// @option className: String = ''\r\n  \t\t// A custom CSS class name to assign to the overlay.\r\n  \t\tclassName: '',\r\n\r\n  \t\t// @option pane: String = undefined\r\n  \t\t// `Map pane` where the overlay will be added.\r\n  \t\tpane: undefined,\r\n\r\n  \t\t// @option content: String|HTMLElement|Function = ''\r\n  \t\t// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be\r\n  \t\t// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n  \t\tcontent: ''\r\n  \t},\r\n\r\n  \tinitialize: function (options, source) {\r\n  \t\tif (options && (options instanceof L.LatLng || isArray(options))) {\r\n  \t\t\tthis._latlng = toLatLng(options);\r\n  \t\t\tsetOptions(this, source);\r\n  \t\t} else {\r\n  \t\t\tsetOptions(this, options);\r\n  \t\t\tthis._source = source;\r\n  \t\t}\r\n  \t\tif (this.options.content) {\r\n  \t\t\tthis._content = this.options.content;\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @method openOn(map: Map): this\r\n  \t// Adds the overlay to the map.\r\n  \t// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.\r\n  \topenOn: function (map) {\r\n  \t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n  \t\tif (!map.hasLayer(this)) {\r\n  \t\t\tmap.addLayer(this);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method close(): this\r\n  \t// Closes the overlay.\r\n  \t// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`\r\n  \t// and `layer.closePopup()`/`.closeTooltip()`.\r\n  \tclose: function () {\r\n  \t\tif (this._map) {\r\n  \t\t\tthis._map.removeLayer(this);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method toggle(layer?: Layer): this\r\n  \t// Opens or closes the overlay bound to layer depending on its current state.\r\n  \t// Argument may be omitted only for overlay bound to layer.\r\n  \t// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.\r\n  \ttoggle: function (layer) {\r\n  \t\tif (this._map) {\r\n  \t\t\tthis.close();\r\n  \t\t} else {\r\n  \t\t\tif (arguments.length) {\r\n  \t\t\t\tthis._source = layer;\r\n  \t\t\t} else {\r\n  \t\t\t\tlayer = this._source;\r\n  \t\t\t}\r\n  \t\t\tthis._prepareOpen();\r\n\r\n  \t\t\t// open the overlay on the map\r\n  \t\t\tthis.openOn(layer._map);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n  \t\tthis._zoomAnimated = map._zoomAnimated;\r\n\r\n  \t\tif (!this._container) {\r\n  \t\t\tthis._initLayout();\r\n  \t\t}\r\n\r\n  \t\tif (map._fadeAnimated) {\r\n  \t\t\tsetOpacity(this._container, 0);\r\n  \t\t}\r\n\r\n  \t\tclearTimeout(this._removeTimeout);\r\n  \t\tthis.getPane().appendChild(this._container);\r\n  \t\tthis.update();\r\n\r\n  \t\tif (map._fadeAnimated) {\r\n  \t\t\tsetOpacity(this._container, 1);\r\n  \t\t}\r\n\r\n  \t\tthis.bringToFront();\r\n\r\n  \t\tif (this.options.interactive) {\r\n  \t\t\taddClass(this._container, 'leaflet-interactive');\r\n  \t\t\tthis.addInteractiveTarget(this._container);\r\n  \t\t}\r\n  \t},\r\n\r\n  \tonRemove: function (map) {\r\n  \t\tif (map._fadeAnimated) {\r\n  \t\t\tsetOpacity(this._container, 0);\r\n  \t\t\tthis._removeTimeout = setTimeout(bind(remove, undefined, this._container), 200);\r\n  \t\t} else {\r\n  \t\t\tremove(this._container);\r\n  \t\t}\r\n\r\n  \t\tif (this.options.interactive) {\r\n  \t\t\tremoveClass(this._container, 'leaflet-interactive');\r\n  \t\t\tthis.removeInteractiveTarget(this._container);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t// @namespace DivOverlay\r\n  \t// @method getLatLng: LatLng\r\n  \t// Returns the geographical point of the overlay.\r\n  \tgetLatLng: function () {\r\n  \t\treturn this._latlng;\r\n  \t},\r\n\r\n  \t// @method setLatLng(latlng: LatLng): this\r\n  \t// Sets the geographical point where the overlay will open.\r\n  \tsetLatLng: function (latlng) {\r\n  \t\tthis._latlng = toLatLng(latlng);\r\n  \t\tif (this._map) {\r\n  \t\t\tthis._updatePosition();\r\n  \t\t\tthis._adjustPan();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method getContent: String|HTMLElement\r\n  \t// Returns the content of the overlay.\r\n  \tgetContent: function () {\r\n  \t\treturn this._content;\r\n  \t},\r\n\r\n  \t// @method setContent(htmlContent: String|HTMLElement|Function): this\r\n  \t// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.\r\n  \t// The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n  \tsetContent: function (content) {\r\n  \t\tthis._content = content;\r\n  \t\tthis.update();\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method getElement: String|HTMLElement\r\n  \t// Returns the HTML container of the overlay.\r\n  \tgetElement: function () {\r\n  \t\treturn this._container;\r\n  \t},\r\n\r\n  \t// @method update: null\r\n  \t// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.\r\n  \tupdate: function () {\r\n  \t\tif (!this._map) { return; }\r\n\r\n  \t\tthis._container.style.visibility = 'hidden';\r\n\r\n  \t\tthis._updateContent();\r\n  \t\tthis._updateLayout();\r\n  \t\tthis._updatePosition();\r\n\r\n  \t\tthis._container.style.visibility = '';\r\n\r\n  \t\tthis._adjustPan();\r\n  \t},\r\n\r\n  \tgetEvents: function () {\r\n  \t\tvar events = {\r\n  \t\t\tzoom: this._updatePosition,\r\n  \t\t\tviewreset: this._updatePosition\r\n  \t\t};\r\n\r\n  \t\tif (this._zoomAnimated) {\r\n  \t\t\tevents.zoomanim = this._animateZoom;\r\n  \t\t}\r\n  \t\treturn events;\r\n  \t},\r\n\r\n  \t// @method isOpen: Boolean\r\n  \t// Returns `true` when the overlay is visible on the map.\r\n  \tisOpen: function () {\r\n  \t\treturn !!this._map && this._map.hasLayer(this);\r\n  \t},\r\n\r\n  \t// @method bringToFront: this\r\n  \t// Brings this overlay in front of other overlays (in the same map pane).\r\n  \tbringToFront: function () {\r\n  \t\tif (this._map) {\r\n  \t\t\ttoFront(this._container);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method bringToBack: this\r\n  \t// Brings this overlay to the back of other overlays (in the same map pane).\r\n  \tbringToBack: function () {\r\n  \t\tif (this._map) {\r\n  \t\t\ttoBack(this._container);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)\r\n  \t_prepareOpen: function (latlng) {\r\n  \t\tvar source = this._source;\r\n  \t\tif (!source._map) { return false; }\r\n\r\n  \t\tif (source instanceof FeatureGroup) {\r\n  \t\t\tsource = null;\r\n  \t\t\tvar layers = this._source._layers;\r\n  \t\t\tfor (var id in layers) {\r\n  \t\t\t\tif (layers[id]._map) {\r\n  \t\t\t\t\tsource = layers[id];\r\n  \t\t\t\t\tbreak;\r\n  \t\t\t\t}\r\n  \t\t\t}\r\n  \t\t\tif (!source) { return false; } // Unable to get source layer.\r\n\r\n  \t\t\t// set overlay source to this layer\r\n  \t\t\tthis._source = source;\r\n  \t\t}\r\n\r\n  \t\tif (!latlng) {\r\n  \t\t\tif (source.getCenter) {\r\n  \t\t\t\tlatlng = source.getCenter();\r\n  \t\t\t} else if (source.getLatLng) {\r\n  \t\t\t\tlatlng = source.getLatLng();\r\n  \t\t\t} else if (source.getBounds) {\r\n  \t\t\t\tlatlng = source.getBounds().getCenter();\r\n  \t\t\t} else {\r\n  \t\t\t\tthrow new Error('Unable to get source layer LatLng.');\r\n  \t\t\t}\r\n  \t\t}\r\n  \t\tthis.setLatLng(latlng);\r\n\r\n  \t\tif (this._map) {\r\n  \t\t\t// update the overlay (content, layout, etc...)\r\n  \t\t\tthis.update();\r\n  \t\t}\r\n\r\n  \t\treturn true;\r\n  \t},\r\n\r\n  \t_updateContent: function () {\r\n  \t\tif (!this._content) { return; }\r\n\r\n  \t\tvar node = this._contentNode;\r\n  \t\tvar content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;\r\n\r\n  \t\tif (typeof content === 'string') {\r\n  \t\t\tnode.innerHTML = content;\r\n  \t\t} else {\r\n  \t\t\twhile (node.hasChildNodes()) {\r\n  \t\t\t\tnode.removeChild(node.firstChild);\r\n  \t\t\t}\r\n  \t\t\tnode.appendChild(content);\r\n  \t\t}\r\n\r\n  \t\t// @namespace DivOverlay\r\n  \t\t// @section DivOverlay events\r\n  \t\t// @event contentupdate: Event\r\n  \t\t// Fired when the content of the overlay is updated\r\n  \t\tthis.fire('contentupdate');\r\n  \t},\r\n\r\n  \t_updatePosition: function () {\r\n  \t\tif (!this._map) { return; }\r\n\r\n  \t\tvar pos = this._map.latLngToLayerPoint(this._latlng),\r\n  \t\t    offset = toPoint(this.options.offset),\r\n  \t\t    anchor = this._getAnchor();\r\n\r\n  \t\tif (this._zoomAnimated) {\r\n  \t\t\tsetPosition(this._container, pos.add(anchor));\r\n  \t\t} else {\r\n  \t\t\toffset = offset.add(pos).add(anchor);\r\n  \t\t}\r\n\r\n  \t\tvar bottom = this._containerBottom = -offset.y,\r\n  \t\t    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;\r\n\r\n  \t\t// bottom position the overlay in case the height of the overlay changes (images loading etc)\r\n  \t\tthis._container.style.bottom = bottom + 'px';\r\n  \t\tthis._container.style.left = left + 'px';\r\n  \t},\r\n\r\n  \t_getAnchor: function () {\r\n  \t\treturn [0, 0];\r\n  \t}\r\n\r\n  });\r\n\r\n  Map.include({\r\n  \t_initOverlay: function (OverlayClass, content, latlng, options) {\r\n  \t\tvar overlay = content;\r\n  \t\tif (!(overlay instanceof OverlayClass)) {\r\n  \t\t\toverlay = new OverlayClass(options).setContent(content);\r\n  \t\t}\r\n  \t\tif (latlng) {\r\n  \t\t\toverlay.setLatLng(latlng);\r\n  \t\t}\r\n  \t\treturn overlay;\r\n  \t}\r\n  });\r\n\r\n\r\n  Layer.include({\r\n  \t_initOverlay: function (OverlayClass, old, content, options) {\r\n  \t\tvar overlay = content;\r\n  \t\tif (overlay instanceof OverlayClass) {\r\n  \t\t\tsetOptions(overlay, options);\r\n  \t\t\toverlay._source = this;\r\n  \t\t} else {\r\n  \t\t\toverlay = (old && !options) ? old : new OverlayClass(options, this);\r\n  \t\t\toverlay.setContent(content);\r\n  \t\t}\r\n  \t\treturn overlay;\r\n  \t}\r\n  });\n\n  /*\r\n   * @class Popup\r\n   * @inherits DivOverlay\r\n   * @aka L.Popup\r\n   * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n   * open popups while making sure that only one popup is open at one time\r\n   * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n   *\r\n   * @example\r\n   *\r\n   * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n   *\r\n   * ```js\r\n   * marker.bindPopup(popupContent).openPopup();\r\n   * ```\r\n   * Path overlays like polylines also have a `bindPopup` method.\r\n   *\r\n   * A popup can be also standalone:\r\n   *\r\n   * ```js\r\n   * var popup = L.popup()\r\n   * \t.setLatLng(latlng)\r\n   * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n   * \t.openOn(map);\r\n   * ```\r\n   * or\r\n   * ```js\r\n   * var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')\r\n   * \t.openOn(map);\r\n   * ```\r\n   */\r\n\r\n\r\n  // @namespace Popup\r\n  var Popup = DivOverlay.extend({\r\n\r\n  \t// @section\r\n  \t// @aka Popup options\r\n  \toptions: {\r\n  \t\t// @option pane: String = 'popupPane'\r\n  \t\t// `Map pane` where the popup will be added.\r\n  \t\tpane: 'popupPane',\r\n\r\n  \t\t// @option offset: Point = Point(0, 7)\r\n  \t\t// The offset of the popup position.\r\n  \t\toffset: [0, 7],\r\n\r\n  \t\t// @option maxWidth: Number = 300\r\n  \t\t// Max width of the popup, in pixels.\r\n  \t\tmaxWidth: 300,\r\n\r\n  \t\t// @option minWidth: Number = 50\r\n  \t\t// Min width of the popup, in pixels.\r\n  \t\tminWidth: 50,\r\n\r\n  \t\t// @option maxHeight: Number = null\r\n  \t\t// If set, creates a scrollable container of the given height\r\n  \t\t// inside a popup if its content exceeds it.\r\n  \t\t// The scrollable container can be styled using the\r\n  \t\t// `leaflet-popup-scrolled` CSS class selector.\r\n  \t\tmaxHeight: null,\r\n\r\n  \t\t// @option autoPan: Boolean = true\r\n  \t\t// Set it to `false` if you don't want the map to do panning animation\r\n  \t\t// to fit the opened popup.\r\n  \t\tautoPan: true,\r\n\r\n  \t\t// @option autoPanPaddingTopLeft: Point = null\r\n  \t\t// The margin between the popup and the top left corner of the map\r\n  \t\t// view after autopanning was performed.\r\n  \t\tautoPanPaddingTopLeft: null,\r\n\r\n  \t\t// @option autoPanPaddingBottomRight: Point = null\r\n  \t\t// The margin between the popup and the bottom right corner of the map\r\n  \t\t// view after autopanning was performed.\r\n  \t\tautoPanPaddingBottomRight: null,\r\n\r\n  \t\t// @option autoPanPadding: Point = Point(5, 5)\r\n  \t\t// Equivalent of setting both top left and bottom right autopan padding to the same value.\r\n  \t\tautoPanPadding: [5, 5],\r\n\r\n  \t\t// @option keepInView: Boolean = false\r\n  \t\t// Set it to `true` if you want to prevent users from panning the popup\r\n  \t\t// off of the screen while it is open.\r\n  \t\tkeepInView: false,\r\n\r\n  \t\t// @option closeButton: Boolean = true\r\n  \t\t// Controls the presence of a close button in the popup.\r\n  \t\tcloseButton: true,\r\n\r\n  \t\t// @option autoClose: Boolean = true\r\n  \t\t// Set it to `false` if you want to override the default behavior of\r\n  \t\t// the popup closing when another popup is opened.\r\n  \t\tautoClose: true,\r\n\r\n  \t\t// @option closeOnEscapeKey: Boolean = true\r\n  \t\t// Set it to `false` if you want to override the default behavior of\r\n  \t\t// the ESC key for closing of the popup.\r\n  \t\tcloseOnEscapeKey: true,\r\n\r\n  \t\t// @option closeOnClick: Boolean = *\r\n  \t\t// Set it if you want to override the default behavior of the popup closing when user clicks\r\n  \t\t// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\r\n\r\n  \t\t// @option className: String = ''\r\n  \t\t// A custom CSS class name to assign to the popup.\r\n  \t\tclassName: ''\r\n  \t},\r\n\r\n  \t// @namespace Popup\r\n  \t// @method openOn(map: Map): this\r\n  \t// Alternative to `map.openPopup(popup)`.\r\n  \t// Adds the popup to the map and closes the previous one.\r\n  \topenOn: function (map) {\r\n  \t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\r\n  \t\tif (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {\r\n  \t\t\tmap.removeLayer(map._popup);\r\n  \t\t}\r\n  \t\tmap._popup = this;\r\n\r\n  \t\treturn DivOverlay.prototype.openOn.call(this, map);\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n  \t\tDivOverlay.prototype.onAdd.call(this, map);\r\n\r\n  \t\t// @namespace Map\r\n  \t\t// @section Popup events\r\n  \t\t// @event popupopen: PopupEvent\r\n  \t\t// Fired when a popup is opened in the map\r\n  \t\tmap.fire('popupopen', {popup: this});\r\n\r\n  \t\tif (this._source) {\r\n  \t\t\t// @namespace Layer\r\n  \t\t\t// @section Popup events\r\n  \t\t\t// @event popupopen: PopupEvent\r\n  \t\t\t// Fired when a popup bound to this layer is opened\r\n  \t\t\tthis._source.fire('popupopen', {popup: this}, true);\r\n  \t\t\t// For non-path layers, we toggle the popup when clicking\r\n  \t\t\t// again the layer, so prevent the map to reopen it.\r\n  \t\t\tif (!(this._source instanceof Path)) {\r\n  \t\t\t\tthis._source.on('preclick', stopPropagation);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t},\r\n\r\n  \tonRemove: function (map) {\r\n  \t\tDivOverlay.prototype.onRemove.call(this, map);\r\n\r\n  \t\t// @namespace Map\r\n  \t\t// @section Popup events\r\n  \t\t// @event popupclose: PopupEvent\r\n  \t\t// Fired when a popup in the map is closed\r\n  \t\tmap.fire('popupclose', {popup: this});\r\n\r\n  \t\tif (this._source) {\r\n  \t\t\t// @namespace Layer\r\n  \t\t\t// @section Popup events\r\n  \t\t\t// @event popupclose: PopupEvent\r\n  \t\t\t// Fired when a popup bound to this layer is closed\r\n  \t\t\tthis._source.fire('popupclose', {popup: this}, true);\r\n  \t\t\tif (!(this._source instanceof Path)) {\r\n  \t\t\t\tthis._source.off('preclick', stopPropagation);\r\n  \t\t\t}\r\n  \t\t}\r\n  \t},\r\n\r\n  \tgetEvents: function () {\r\n  \t\tvar events = DivOverlay.prototype.getEvents.call(this);\r\n\r\n  \t\tif (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\r\n  \t\t\tevents.preclick = this.close;\r\n  \t\t}\r\n\r\n  \t\tif (this.options.keepInView) {\r\n  \t\t\tevents.moveend = this._adjustPan;\r\n  \t\t}\r\n\r\n  \t\treturn events;\r\n  \t},\r\n\r\n  \t_initLayout: function () {\r\n  \t\tvar prefix = 'leaflet-popup',\r\n  \t\t    container = this._container = create$1('div',\r\n  \t\t\tprefix + ' ' + (this.options.className || '') +\r\n  \t\t\t' leaflet-zoom-animated');\r\n\r\n  \t\tvar wrapper = this._wrapper = create$1('div', prefix + '-content-wrapper', container);\r\n  \t\tthis._contentNode = create$1('div', prefix + '-content', wrapper);\r\n\r\n  \t\tdisableClickPropagation(container);\r\n  \t\tdisableScrollPropagation(this._contentNode);\r\n  \t\ton(container, 'contextmenu', stopPropagation);\r\n\r\n  \t\tthis._tipContainer = create$1('div', prefix + '-tip-container', container);\r\n  \t\tthis._tip = create$1('div', prefix + '-tip', this._tipContainer);\r\n\r\n  \t\tif (this.options.closeButton) {\r\n  \t\t\tvar closeButton = this._closeButton = create$1('a', prefix + '-close-button', container);\r\n  \t\t\tcloseButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399\r\n  \t\t\tcloseButton.setAttribute('aria-label', 'Close popup');\r\n  \t\t\tcloseButton.href = '#close';\r\n  \t\t\tcloseButton.innerHTML = '<span aria-hidden=\"true\">&#215;</span>';\r\n\r\n  \t\t\ton(closeButton, 'click', function (ev) {\r\n  \t\t\t\tpreventDefault(ev);\r\n  \t\t\t\tthis.close();\r\n  \t\t\t}, this);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_updateLayout: function () {\r\n  \t\tvar container = this._contentNode,\r\n  \t\t    style = container.style;\r\n\r\n  \t\tstyle.width = '';\r\n  \t\tstyle.whiteSpace = 'nowrap';\r\n\r\n  \t\tvar width = container.offsetWidth;\r\n  \t\twidth = Math.min(width, this.options.maxWidth);\r\n  \t\twidth = Math.max(width, this.options.minWidth);\r\n\r\n  \t\tstyle.width = (width + 1) + 'px';\r\n  \t\tstyle.whiteSpace = '';\r\n\r\n  \t\tstyle.height = '';\r\n\r\n  \t\tvar height = container.offsetHeight,\r\n  \t\t    maxHeight = this.options.maxHeight,\r\n  \t\t    scrolledClass = 'leaflet-popup-scrolled';\r\n\r\n  \t\tif (maxHeight && height > maxHeight) {\r\n  \t\t\tstyle.height = maxHeight + 'px';\r\n  \t\t\taddClass(container, scrolledClass);\r\n  \t\t} else {\r\n  \t\t\tremoveClass(container, scrolledClass);\r\n  \t\t}\r\n\r\n  \t\tthis._containerWidth = this._container.offsetWidth;\r\n  \t},\r\n\r\n  \t_animateZoom: function (e) {\r\n  \t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\r\n  \t\t    anchor = this._getAnchor();\r\n  \t\tsetPosition(this._container, pos.add(anchor));\r\n  \t},\r\n\r\n  \t_adjustPan: function (e) {\r\n  \t\tif (!this.options.autoPan) { return; }\r\n  \t\tif (this._map._panAnim) { this._map._panAnim.stop(); }\r\n\r\n  \t\tvar map = this._map,\r\n  \t\t    marginBottom = parseInt(getStyle(this._container, 'marginBottom'), 10) || 0,\r\n  \t\t    containerHeight = this._container.offsetHeight + marginBottom,\r\n  \t\t    containerWidth = this._containerWidth,\r\n  \t\t    layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\r\n\r\n  \t\tlayerPos._add(getPosition(this._container));\r\n\r\n  \t\tvar containerPos = map.layerPointToContainerPoint(layerPos),\r\n  \t\t    padding = toPoint(this.options.autoPanPadding),\r\n  \t\t    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\r\n  \t\t    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\r\n  \t\t    size = map.getSize(),\r\n  \t\t    dx = 0,\r\n  \t\t    dy = 0;\r\n\r\n  \t\tif (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\r\n  \t\t\tdx = containerPos.x + containerWidth - size.x + paddingBR.x;\r\n  \t\t}\r\n  \t\tif (containerPos.x - dx - paddingTL.x < 0) { // left\r\n  \t\t\tdx = containerPos.x - paddingTL.x;\r\n  \t\t}\r\n  \t\tif (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\r\n  \t\t\tdy = containerPos.y + containerHeight - size.y + paddingBR.y;\r\n  \t\t}\r\n  \t\tif (containerPos.y - dy - paddingTL.y < 0) { // top\r\n  \t\t\tdy = containerPos.y - paddingTL.y;\r\n  \t\t}\r\n\r\n  \t\t// @namespace Map\r\n  \t\t// @section Popup events\r\n  \t\t// @event autopanstart: Event\r\n  \t\t// Fired when the map starts autopanning when opening a popup.\r\n  \t\tif (dx || dy) {\r\n  \t\t\tmap\r\n  \t\t\t    .fire('autopanstart')\r\n  \t\t\t    .panBy([dx, dy], {animate: e && e.type === 'moveend'});\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_getAnchor: function () {\r\n  \t\t// Where should we anchor the popup on the source layer?\r\n  \t\treturn toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\r\n  \t}\r\n\r\n  });\r\n\r\n  // @namespace Popup\r\n  // @factory L.popup(options?: Popup options, source?: Layer)\r\n  // Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\r\n  // @alternative\r\n  // @factory L.popup(latlng: LatLng, options?: Popup options)\r\n  // Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.\r\n  var popup = function (options, source) {\r\n  \treturn new Popup(options, source);\r\n  };\r\n\r\n\r\n  /* @namespace Map\r\n   * @section Interaction Options\r\n   * @option closePopupOnClick: Boolean = true\r\n   * Set it to `false` if you don't want popups to close when user clicks the map.\r\n   */\r\n  Map.mergeOptions({\r\n  \tclosePopupOnClick: true\r\n  });\r\n\r\n\r\n  // @namespace Map\r\n  // @section Methods for Layers and Controls\r\n  Map.include({\r\n  \t// @method openPopup(popup: Popup): this\r\n  \t// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\r\n  \t// @alternative\r\n  \t// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\r\n  \t// Creates a popup with the specified content and options and opens it in the given point on a map.\r\n  \topenPopup: function (popup, latlng, options) {\r\n  \t\tthis._initOverlay(Popup, popup, latlng, options)\r\n  \t\t  .openOn(this);\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method closePopup(popup?: Popup): this\r\n  \t// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\r\n  \tclosePopup: function (popup) {\r\n  \t\tpopup = arguments.length ? popup : this._popup;\r\n  \t\tif (popup) {\r\n  \t\t\tpopup.close();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t}\r\n  });\r\n\r\n  /*\r\n   * @namespace Layer\r\n   * @section Popup methods example\r\n   *\r\n   * All layers share a set of methods convenient for binding popups to it.\r\n   *\r\n   * ```js\r\n   * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n   * layer.openPopup();\r\n   * layer.closePopup();\r\n   * ```\r\n   *\r\n   * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n   */\r\n\r\n  // @section Popup methods\r\n  Layer.include({\r\n\r\n  \t// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\r\n  \t// Binds a popup to the layer with the passed `content` and sets up the\r\n  \t// necessary event listeners. If a `Function` is passed it will receive\r\n  \t// the layer as the first argument and should return a `String` or `HTMLElement`.\r\n  \tbindPopup: function (content, options) {\r\n  \t\tthis._popup = this._initOverlay(Popup, this._popup, content, options);\r\n  \t\tif (!this._popupHandlersAdded) {\r\n  \t\t\tthis.on({\r\n  \t\t\t\tclick: this._openPopup,\r\n  \t\t\t\tkeypress: this._onKeyPress,\r\n  \t\t\t\tremove: this.closePopup,\r\n  \t\t\t\tmove: this._movePopup\r\n  \t\t\t});\r\n  \t\t\tthis._popupHandlersAdded = true;\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method unbindPopup(): this\r\n  \t// Removes the popup previously bound with `bindPopup`.\r\n  \tunbindPopup: function () {\r\n  \t\tif (this._popup) {\r\n  \t\t\tthis.off({\r\n  \t\t\t\tclick: this._openPopup,\r\n  \t\t\t\tkeypress: this._onKeyPress,\r\n  \t\t\t\tremove: this.closePopup,\r\n  \t\t\t\tmove: this._movePopup\r\n  \t\t\t});\r\n  \t\t\tthis._popupHandlersAdded = false;\r\n  \t\t\tthis._popup = null;\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method openPopup(latlng?: LatLng): this\r\n  \t// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\r\n  \topenPopup: function (latlng) {\r\n  \t\tif (this._popup && this._popup._prepareOpen(latlng || this._latlng)) {\r\n\r\n  \t\t\t// open the popup on the map\r\n  \t\t\tthis._popup.openOn(this._map);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method closePopup(): this\r\n  \t// Closes the popup bound to this layer if it is open.\r\n  \tclosePopup: function () {\r\n  \t\tif (this._popup) {\r\n  \t\t\tthis._popup.close();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method togglePopup(): this\r\n  \t// Opens or closes the popup bound to this layer depending on its current state.\r\n  \ttogglePopup: function () {\r\n  \t\tif (this._popup) {\r\n  \t\t\tthis._popup.toggle(this);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method isPopupOpen(): boolean\r\n  \t// Returns `true` if the popup bound to this layer is currently open.\r\n  \tisPopupOpen: function () {\r\n  \t\treturn (this._popup ? this._popup.isOpen() : false);\r\n  \t},\r\n\r\n  \t// @method setPopupContent(content: String|HTMLElement|Popup): this\r\n  \t// Sets the content of the popup bound to this layer.\r\n  \tsetPopupContent: function (content) {\r\n  \t\tif (this._popup) {\r\n  \t\t\tthis._popup.setContent(content);\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method getPopup(): Popup\r\n  \t// Returns the popup bound to this layer.\r\n  \tgetPopup: function () {\r\n  \t\treturn this._popup;\r\n  \t},\r\n\r\n  \t_openPopup: function (e) {\r\n  \t\tif (!this._popup || !this._map) {\r\n  \t\t\treturn;\r\n  \t\t}\r\n  \t\t// prevent map click\r\n  \t\tstop(e);\r\n\r\n  \t\tvar target = e.layer || e.target;\r\n  \t\tif (this._popup._source === target && !(target instanceof Path)) {\r\n  \t\t\t// treat it like a marker and figure out\r\n  \t\t\t// if we should toggle it open/closed\r\n  \t\t\tif (this._map.hasLayer(this._popup)) {\r\n  \t\t\t\tthis.closePopup();\r\n  \t\t\t} else {\r\n  \t\t\t\tthis.openPopup(e.latlng);\r\n  \t\t\t}\r\n  \t\t\treturn;\r\n  \t\t}\r\n  \t\tthis._popup._source = target;\r\n  \t\tthis.openPopup(e.latlng);\r\n  \t},\r\n\r\n  \t_movePopup: function (e) {\r\n  \t\tthis._popup.setLatLng(e.latlng);\r\n  \t},\r\n\r\n  \t_onKeyPress: function (e) {\r\n  \t\tif (e.originalEvent.keyCode === 13) {\r\n  \t\t\tthis._openPopup(e);\r\n  \t\t}\r\n  \t}\r\n  });\n\n  /*\n   * @class Tooltip\n   * @inherits DivOverlay\n   * @aka L.Tooltip\n   * Used to display small texts on top of map layers.\n   *\n   * @example\n   * If you want to just bind a tooltip to marker:\n   *\n   * ```js\n   * marker.bindTooltip(\"my tooltip text\").openTooltip();\n   * ```\n   * Path overlays like polylines also have a `bindTooltip` method.\n   *\n   * A tooltip can be also standalone:\n   *\n   * ```js\n   * var tooltip = L.tooltip()\n   * \t.setLatLng(latlng)\n   * \t.setContent('Hello world!<br />This is a nice tooltip.')\n   * \t.addTo(map);\n   * ```\n   * or\n   * ```js\n   * var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})\n   * \t.addTo(map);\n   * ```\n   *\n   *\n   * Note about tooltip offset. Leaflet takes two options in consideration\n   * for computing tooltip offsetting:\n   * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n   *   Add a positive x offset to move the tooltip to the right, and a positive y offset to\n   *   move it to the bottom. Negatives will move to the left and top.\n   * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n   *   should adapt this value if you use a custom icon.\n   */\n\n\n  // @namespace Tooltip\n  var Tooltip = DivOverlay.extend({\n\n  \t// @section\n  \t// @aka Tooltip options\n  \toptions: {\n  \t\t// @option pane: String = 'tooltipPane'\n  \t\t// `Map pane` where the tooltip will be added.\n  \t\tpane: 'tooltipPane',\n\n  \t\t// @option offset: Point = Point(0, 0)\n  \t\t// Optional offset of the tooltip position.\n  \t\toffset: [0, 0],\n\n  \t\t// @option direction: String = 'auto'\n  \t\t// Direction where to open the tooltip. Possible values are: `right`, `left`,\n  \t\t// `top`, `bottom`, `center`, `auto`.\n  \t\t// `auto` will dynamically switch between `right` and `left` according to the tooltip\n  \t\t// position on the map.\n  \t\tdirection: 'auto',\n\n  \t\t// @option permanent: Boolean = false\n  \t\t// Whether to open the tooltip permanently or only on mouseover.\n  \t\tpermanent: false,\n\n  \t\t// @option sticky: Boolean = false\n  \t\t// If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n  \t\tsticky: false,\n\n  \t\t// @option opacity: Number = 0.9\n  \t\t// Tooltip container opacity.\n  \t\topacity: 0.9\n  \t},\n\n  \tonAdd: function (map) {\n  \t\tDivOverlay.prototype.onAdd.call(this, map);\n  \t\tthis.setOpacity(this.options.opacity);\n\n  \t\t// @namespace Map\n  \t\t// @section Tooltip events\n  \t\t// @event tooltipopen: TooltipEvent\n  \t\t// Fired when a tooltip is opened in the map.\n  \t\tmap.fire('tooltipopen', {tooltip: this});\n\n  \t\tif (this._source) {\n  \t\t\tthis.addEventParent(this._source);\n\n  \t\t\t// @namespace Layer\n  \t\t\t// @section Tooltip events\n  \t\t\t// @event tooltipopen: TooltipEvent\n  \t\t\t// Fired when a tooltip bound to this layer is opened.\n  \t\t\tthis._source.fire('tooltipopen', {tooltip: this}, true);\n  \t\t}\n  \t},\n\n  \tonRemove: function (map) {\n  \t\tDivOverlay.prototype.onRemove.call(this, map);\n\n  \t\t// @namespace Map\n  \t\t// @section Tooltip events\n  \t\t// @event tooltipclose: TooltipEvent\n  \t\t// Fired when a tooltip in the map is closed.\n  \t\tmap.fire('tooltipclose', {tooltip: this});\n\n  \t\tif (this._source) {\n  \t\t\tthis.removeEventParent(this._source);\n\n  \t\t\t// @namespace Layer\n  \t\t\t// @section Tooltip events\n  \t\t\t// @event tooltipclose: TooltipEvent\n  \t\t\t// Fired when a tooltip bound to this layer is closed.\n  \t\t\tthis._source.fire('tooltipclose', {tooltip: this}, true);\n  \t\t}\n  \t},\n\n  \tgetEvents: function () {\n  \t\tvar events = DivOverlay.prototype.getEvents.call(this);\n\n  \t\tif (!this.options.permanent) {\n  \t\t\tevents.preclick = this.close;\n  \t\t}\n\n  \t\treturn events;\n  \t},\n\n  \t_initLayout: function () {\n  \t\tvar prefix = 'leaflet-tooltip',\n  \t\t    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n\n  \t\tthis._contentNode = this._container = create$1('div', className);\n\n  \t\tthis._container.setAttribute('role', 'tooltip');\n  \t\tthis._container.setAttribute('id', 'leaflet-tooltip-' + stamp(this));\n  \t},\n\n  \t_updateLayout: function () {},\n\n  \t_adjustPan: function () {},\n\n  \t_setPosition: function (pos) {\n  \t\tvar subX, subY,\n  \t\t    map = this._map,\n  \t\t    container = this._container,\n  \t\t    centerPoint = map.latLngToContainerPoint(map.getCenter()),\n  \t\t    tooltipPoint = map.layerPointToContainerPoint(pos),\n  \t\t    direction = this.options.direction,\n  \t\t    tooltipWidth = container.offsetWidth,\n  \t\t    tooltipHeight = container.offsetHeight,\n  \t\t    offset = toPoint(this.options.offset),\n  \t\t    anchor = this._getAnchor();\n\n  \t\tif (direction === 'top') {\n  \t\t\tsubX = tooltipWidth / 2;\n  \t\t\tsubY = tooltipHeight;\n  \t\t} else if (direction === 'bottom') {\n  \t\t\tsubX = tooltipWidth / 2;\n  \t\t\tsubY = 0;\n  \t\t} else if (direction === 'center') {\n  \t\t\tsubX = tooltipWidth / 2;\n  \t\t\tsubY = tooltipHeight / 2;\n  \t\t} else if (direction === 'right') {\n  \t\t\tsubX = 0;\n  \t\t\tsubY = tooltipHeight / 2;\n  \t\t} else if (direction === 'left') {\n  \t\t\tsubX = tooltipWidth;\n  \t\t\tsubY = tooltipHeight / 2;\n  \t\t} else if (tooltipPoint.x < centerPoint.x) {\n  \t\t\tdirection = 'right';\n  \t\t\tsubX = 0;\n  \t\t\tsubY = tooltipHeight / 2;\n  \t\t} else {\n  \t\t\tdirection = 'left';\n  \t\t\tsubX = tooltipWidth + (offset.x + anchor.x) * 2;\n  \t\t\tsubY = tooltipHeight / 2;\n  \t\t}\n\n  \t\tpos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);\n\n  \t\tremoveClass(container, 'leaflet-tooltip-right');\n  \t\tremoveClass(container, 'leaflet-tooltip-left');\n  \t\tremoveClass(container, 'leaflet-tooltip-top');\n  \t\tremoveClass(container, 'leaflet-tooltip-bottom');\n  \t\taddClass(container, 'leaflet-tooltip-' + direction);\n  \t\tsetPosition(container, pos);\n  \t},\n\n  \t_updatePosition: function () {\n  \t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n  \t\tthis._setPosition(pos);\n  \t},\n\n  \tsetOpacity: function (opacity) {\n  \t\tthis.options.opacity = opacity;\n\n  \t\tif (this._container) {\n  \t\t\tsetOpacity(this._container, opacity);\n  \t\t}\n  \t},\n\n  \t_animateZoom: function (e) {\n  \t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n  \t\tthis._setPosition(pos);\n  \t},\n\n  \t_getAnchor: function () {\n  \t\t// Where should we anchor the tooltip on the source layer?\n  \t\treturn toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n  \t}\n\n  });\n\n  // @namespace Tooltip\n  // @factory L.tooltip(options?: Tooltip options, source?: Layer)\n  // Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\n  // @alternative\n  // @factory L.tooltip(latlng: LatLng, options?: Tooltip options)\n  // Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.\n  var tooltip = function (options, source) {\n  \treturn new Tooltip(options, source);\n  };\n\n  // @namespace Map\n  // @section Methods for Layers and Controls\n  Map.include({\n\n  \t// @method openTooltip(tooltip: Tooltip): this\n  \t// Opens the specified tooltip.\n  \t// @alternative\n  \t// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n  \t// Creates a tooltip with the specified content and options and open it.\n  \topenTooltip: function (tooltip, latlng, options) {\n  \t\tthis._initOverlay(Tooltip, tooltip, latlng, options)\n  \t\t  .openOn(this);\n\n  \t\treturn this;\n  \t},\n\n  \t// @method closeTooltip(tooltip: Tooltip): this\n  \t// Closes the tooltip given as parameter.\n  \tcloseTooltip: function (tooltip) {\n  \t\ttooltip.close();\n  \t\treturn this;\n  \t}\n\n  });\n\n  /*\n   * @namespace Layer\n   * @section Tooltip methods example\n   *\n   * All layers share a set of methods convenient for binding tooltips to it.\n   *\n   * ```js\n   * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n   * layer.openTooltip();\n   * layer.closeTooltip();\n   * ```\n   */\n\n  // @section Tooltip methods\n  Layer.include({\n\n  \t// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n  \t// Binds a tooltip to the layer with the passed `content` and sets up the\n  \t// necessary event listeners. If a `Function` is passed it will receive\n  \t// the layer as the first argument and should return a `String` or `HTMLElement`.\n  \tbindTooltip: function (content, options) {\n\n  \t\tif (this._tooltip && this.isTooltipOpen()) {\n  \t\t\tthis.unbindTooltip();\n  \t\t}\n\n  \t\tthis._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);\n  \t\tthis._initTooltipInteractions();\n\n  \t\tif (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n  \t\t\tthis.openTooltip();\n  \t\t}\n\n  \t\treturn this;\n  \t},\n\n  \t// @method unbindTooltip(): this\n  \t// Removes the tooltip previously bound with `bindTooltip`.\n  \tunbindTooltip: function () {\n  \t\tif (this._tooltip) {\n  \t\t\tthis._initTooltipInteractions(true);\n  \t\t\tthis.closeTooltip();\n  \t\t\tthis._tooltip = null;\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t_initTooltipInteractions: function (remove) {\n  \t\tif (!remove && this._tooltipHandlersAdded) { return; }\n  \t\tvar onOff = remove ? 'off' : 'on',\n  \t\t    events = {\n  \t\t\tremove: this.closeTooltip,\n  \t\t\tmove: this._moveTooltip\n  \t\t    };\n  \t\tif (!this._tooltip.options.permanent) {\n  \t\t\tevents.mouseover = this._openTooltip;\n  \t\t\tevents.mouseout = this.closeTooltip;\n  \t\t\tevents.click = this._openTooltip;\n  \t\t\tif (this._map) {\n  \t\t\t\tthis._addFocusListeners();\n  \t\t\t} else {\n  \t\t\t\tevents.add = this._addFocusListeners;\n  \t\t\t}\n  \t\t} else {\n  \t\t\tevents.add = this._openTooltip;\n  \t\t}\n  \t\tif (this._tooltip.options.sticky) {\n  \t\t\tevents.mousemove = this._moveTooltip;\n  \t\t}\n  \t\tthis[onOff](events);\n  \t\tthis._tooltipHandlersAdded = !remove;\n  \t},\n\n  \t// @method openTooltip(latlng?: LatLng): this\n  \t// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n  \topenTooltip: function (latlng) {\n  \t\tif (this._tooltip && this._tooltip._prepareOpen(latlng)) {\n  \t\t\t// open the tooltip on the map\n  \t\t\tthis._tooltip.openOn(this._map);\n\n  \t\t\tif (this.getElement) {\n  \t\t\t\tthis._setAriaDescribedByOnLayer(this);\n  \t\t\t} else if (this.eachLayer) {\n  \t\t\t\tthis.eachLayer(this._setAriaDescribedByOnLayer, this);\n  \t\t\t}\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method closeTooltip(): this\n  \t// Closes the tooltip bound to this layer if it is open.\n  \tcloseTooltip: function () {\n  \t\tif (this._tooltip) {\n  \t\t\treturn this._tooltip.close();\n  \t\t}\n  \t},\n\n  \t// @method toggleTooltip(): this\n  \t// Opens or closes the tooltip bound to this layer depending on its current state.\n  \ttoggleTooltip: function () {\n  \t\tif (this._tooltip) {\n  \t\t\tthis._tooltip.toggle(this);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method isTooltipOpen(): boolean\n  \t// Returns `true` if the tooltip bound to this layer is currently open.\n  \tisTooltipOpen: function () {\n  \t\treturn this._tooltip.isOpen();\n  \t},\n\n  \t// @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n  \t// Sets the content of the tooltip bound to this layer.\n  \tsetTooltipContent: function (content) {\n  \t\tif (this._tooltip) {\n  \t\t\tthis._tooltip.setContent(content);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method getTooltip(): Tooltip\n  \t// Returns the tooltip bound to this layer.\n  \tgetTooltip: function () {\n  \t\treturn this._tooltip;\n  \t},\n\n  \t_addFocusListeners: function () {\n  \t\tif (this.getElement) {\n  \t\t\tthis._addFocusListenersOnLayer(this);\n  \t\t} else if (this.eachLayer) {\n  \t\t\tthis.eachLayer(this._addFocusListenersOnLayer, this);\n  \t\t}\n  \t},\n\n  \t_addFocusListenersOnLayer: function (layer) {\n  \t\tvar el = layer.getElement();\n  \t\tif (el) {\n  \t\t\ton(el, 'focus', function () {\n  \t\t\t\tthis._tooltip._source = layer;\n  \t\t\t\tthis.openTooltip();\n  \t\t\t}, this);\n  \t\t\ton(el, 'blur', this.closeTooltip, this);\n  \t\t}\n  \t},\n\n  \t_setAriaDescribedByOnLayer: function (layer) {\n  \t\tvar el = layer.getElement();\n  \t\tif (el) {\n  \t\t\tel.setAttribute('aria-describedby', this._tooltip._container.id);\n  \t\t}\n  \t},\n\n\n  \t_openTooltip: function (e) {\n  \t\tif (!this._tooltip || !this._map || (this._map.dragging && this._map.dragging.moving())) {\n  \t\t\treturn;\n  \t\t}\n  \t\tthis._tooltip._source = e.layer || e.target;\n\n  \t\tthis.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);\n  \t},\n\n  \t_moveTooltip: function (e) {\n  \t\tvar latlng = e.latlng, containerPoint, layerPoint;\n  \t\tif (this._tooltip.options.sticky && e.originalEvent) {\n  \t\t\tcontainerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n  \t\t\tlayerPoint = this._map.containerPointToLayerPoint(containerPoint);\n  \t\t\tlatlng = this._map.layerPointToLatLng(layerPoint);\n  \t\t}\n  \t\tthis._tooltip.setLatLng(latlng);\n  \t}\n  });\n\n  /*\n   * @class DivIcon\n   * @aka L.DivIcon\n   * @inherits Icon\n   *\n   * Represents a lightweight icon for markers that uses a simple `<div>`\n   * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n   *\n   * @example\n   * ```js\n   * var myIcon = L.divIcon({className: 'my-div-icon'});\n   * // you can set .my-div-icon styles in CSS\n   *\n   * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n   * ```\n   *\n   * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n   */\n\n  var DivIcon = Icon.extend({\n  \toptions: {\n  \t\t// @section\n  \t\t// @aka DivIcon options\n  \t\ticonSize: [12, 12], // also can be set through CSS\n\n  \t\t// iconAnchor: (Point),\n  \t\t// popupAnchor: (Point),\n\n  \t\t// @option html: String|HTMLElement = ''\n  \t\t// Custom HTML code to put inside the div element, empty by default. Alternatively,\n  \t\t// an instance of `HTMLElement`.\n  \t\thtml: false,\n\n  \t\t// @option bgPos: Point = [0, 0]\n  \t\t// Optional relative position of the background, in pixels\n  \t\tbgPos: null,\n\n  \t\tclassName: 'leaflet-div-icon'\n  \t},\n\n  \tcreateIcon: function (oldIcon) {\n  \t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n  \t\t    options = this.options;\n\n  \t\tif (options.html instanceof Element) {\n  \t\t\tempty(div);\n  \t\t\tdiv.appendChild(options.html);\n  \t\t} else {\n  \t\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n  \t\t}\n\n  \t\tif (options.bgPos) {\n  \t\t\tvar bgPos = toPoint(options.bgPos);\n  \t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n  \t\t}\n  \t\tthis._setIconStyles(div, 'icon');\n\n  \t\treturn div;\n  \t},\n\n  \tcreateShadow: function () {\n  \t\treturn null;\n  \t}\n  });\n\n  // @factory L.divIcon(options: DivIcon options)\n  // Creates a `DivIcon` instance with the given options.\n  function divIcon(options) {\n  \treturn new DivIcon(options);\n  }\n\n  Icon.Default = IconDefault;\n\n  /*\n   * @class GridLayer\n   * @inherits Layer\n   * @aka L.GridLayer\n   *\n   * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n   * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n   *\n   *\n   * @section Synchronous usage\n   * @example\n   *\n   * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n   *\n   * ```js\n   * var CanvasLayer = L.GridLayer.extend({\n   *     createTile: function(coords){\n   *         // create a <canvas> element for drawing\n   *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n   *\n   *         // setup tile width and height according to the options\n   *         var size = this.getTileSize();\n   *         tile.width = size.x;\n   *         tile.height = size.y;\n   *\n   *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n   *         var ctx = tile.getContext('2d');\n   *\n   *         // return the tile so it can be rendered on screen\n   *         return tile;\n   *     }\n   * });\n   * ```\n   *\n   * @section Asynchronous usage\n   * @example\n   *\n   * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n   *\n   * ```js\n   * var CanvasLayer = L.GridLayer.extend({\n   *     createTile: function(coords, done){\n   *         var error;\n   *\n   *         // create a <canvas> element for drawing\n   *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n   *\n   *         // setup tile width and height according to the options\n   *         var size = this.getTileSize();\n   *         tile.width = size.x;\n   *         tile.height = size.y;\n   *\n   *         // draw something asynchronously and pass the tile to the done() callback\n   *         setTimeout(function() {\n   *             done(error, tile);\n   *         }, 1000);\n   *\n   *         return tile;\n   *     }\n   * });\n   * ```\n   *\n   * @section\n   */\n\n\n  var GridLayer = Layer.extend({\n\n  \t// @section\n  \t// @aka GridLayer options\n  \toptions: {\n  \t\t// @option tileSize: Number|Point = 256\n  \t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n  \t\ttileSize: 256,\n\n  \t\t// @option opacity: Number = 1.0\n  \t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n  \t\topacity: 1,\n\n  \t\t// @option updateWhenIdle: Boolean = (depends)\n  \t\t// Load new tiles only when panning ends.\n  \t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n  \t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n  \t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n  \t\tupdateWhenIdle: Browser.mobile,\n\n  \t\t// @option updateWhenZooming: Boolean = true\n  \t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n  \t\tupdateWhenZooming: true,\n\n  \t\t// @option updateInterval: Number = 200\n  \t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n  \t\tupdateInterval: 200,\n\n  \t\t// @option zIndex: Number = 1\n  \t\t// The explicit zIndex of the tile layer.\n  \t\tzIndex: 1,\n\n  \t\t// @option bounds: LatLngBounds = undefined\n  \t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n  \t\tbounds: null,\n\n  \t\t// @option minZoom: Number = 0\n  \t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n  \t\tminZoom: 0,\n\n  \t\t// @option maxZoom: Number = undefined\n  \t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n  \t\tmaxZoom: undefined,\n\n  \t\t// @option maxNativeZoom: Number = undefined\n  \t\t// Maximum zoom number the tile source has available. If it is specified,\n  \t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n  \t\t// from `maxNativeZoom` level and auto-scaled.\n  \t\tmaxNativeZoom: undefined,\n\n  \t\t// @option minNativeZoom: Number = undefined\n  \t\t// Minimum zoom number the tile source has available. If it is specified,\n  \t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n  \t\t// from `minNativeZoom` level and auto-scaled.\n  \t\tminNativeZoom: undefined,\n\n  \t\t// @option noWrap: Boolean = false\n  \t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n  \t\t// GridLayer will only be displayed once at low zoom levels. Has no\n  \t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n  \t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n  \t\t// tiles outside the CRS limits.\n  \t\tnoWrap: false,\n\n  \t\t// @option pane: String = 'tilePane'\n  \t\t// `Map pane` where the grid layer will be added.\n  \t\tpane: 'tilePane',\n\n  \t\t// @option className: String = ''\n  \t\t// A custom class name to assign to the tile layer. Empty by default.\n  \t\tclassName: '',\n\n  \t\t// @option keepBuffer: Number = 2\n  \t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n  \t\tkeepBuffer: 2\n  \t},\n\n  \tinitialize: function (options) {\n  \t\tsetOptions(this, options);\n  \t},\n\n  \tonAdd: function () {\n  \t\tthis._initContainer();\n\n  \t\tthis._levels = {};\n  \t\tthis._tiles = {};\n\n  \t\tthis._resetView(); // implicit _update() call\n  \t},\n\n  \tbeforeAdd: function (map) {\n  \t\tmap._addZoomLimit(this);\n  \t},\n\n  \tonRemove: function (map) {\n  \t\tthis._removeAllTiles();\n  \t\tremove(this._container);\n  \t\tmap._removeZoomLimit(this);\n  \t\tthis._container = null;\n  \t\tthis._tileZoom = undefined;\n  \t},\n\n  \t// @method bringToFront: this\n  \t// Brings the tile layer to the top of all tile layers.\n  \tbringToFront: function () {\n  \t\tif (this._map) {\n  \t\t\ttoFront(this._container);\n  \t\t\tthis._setAutoZIndex(Math.max);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method bringToBack: this\n  \t// Brings the tile layer to the bottom of all tile layers.\n  \tbringToBack: function () {\n  \t\tif (this._map) {\n  \t\t\ttoBack(this._container);\n  \t\t\tthis._setAutoZIndex(Math.min);\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \t// @method getContainer: HTMLElement\n  \t// Returns the HTML element that contains the tiles for this layer.\n  \tgetContainer: function () {\n  \t\treturn this._container;\n  \t},\n\n  \t// @method setOpacity(opacity: Number): this\n  \t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n  \tsetOpacity: function (opacity) {\n  \t\tthis.options.opacity = opacity;\n  \t\tthis._updateOpacity();\n  \t\treturn this;\n  \t},\n\n  \t// @method setZIndex(zIndex: Number): this\n  \t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n  \tsetZIndex: function (zIndex) {\n  \t\tthis.options.zIndex = zIndex;\n  \t\tthis._updateZIndex();\n\n  \t\treturn this;\n  \t},\n\n  \t// @method isLoading: Boolean\n  \t// Returns `true` if any tile in the grid layer has not finished loading.\n  \tisLoading: function () {\n  \t\treturn this._loading;\n  \t},\n\n  \t// @method redraw: this\n  \t// Causes the layer to clear all the tiles and request them again.\n  \tredraw: function () {\n  \t\tif (this._map) {\n  \t\t\tthis._removeAllTiles();\n  \t\t\tvar tileZoom = this._clampZoom(this._map.getZoom());\n  \t\t\tif (tileZoom !== this._tileZoom) {\n  \t\t\t\tthis._tileZoom = tileZoom;\n  \t\t\t\tthis._updateLevels();\n  \t\t\t}\n  \t\t\tthis._update();\n  \t\t}\n  \t\treturn this;\n  \t},\n\n  \tgetEvents: function () {\n  \t\tvar events = {\n  \t\t\tviewprereset: this._invalidateAll,\n  \t\t\tviewreset: this._resetView,\n  \t\t\tzoom: this._resetView,\n  \t\t\tmoveend: this._onMoveEnd\n  \t\t};\n\n  \t\tif (!this.options.updateWhenIdle) {\n  \t\t\t// update tiles on move, but not more often than once per given interval\n  \t\t\tif (!this._onMove) {\n  \t\t\t\tthis._onMove = throttle(this._onMoveEnd, this.options.updateInterval, this);\n  \t\t\t}\n\n  \t\t\tevents.move = this._onMove;\n  \t\t}\n\n  \t\tif (this._zoomAnimated) {\n  \t\t\tevents.zoomanim = this._animateZoom;\n  \t\t}\n\n  \t\treturn events;\n  \t},\n\n  \t// @section Extension methods\n  \t// Layers extending `GridLayer` shall reimplement the following method.\n  \t// @method createTile(coords: Object, done?: Function): HTMLElement\n  \t// Called only internally, must be overridden by classes extending `GridLayer`.\n  \t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n  \t// is specified, it must be called when the tile has finished loading and drawing.\n  \tcreateTile: function () {\n  \t\treturn document.createElement('div');\n  \t},\n\n  \t// @section\n  \t// @method getTileSize: Point\n  \t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n  \tgetTileSize: function () {\n  \t\tvar s = this.options.tileSize;\n  \t\treturn s instanceof Point ? s : new Point(s, s);\n  \t},\n\n  \t_updateZIndex: function () {\n  \t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n  \t\t\tthis._container.style.zIndex = this.options.zIndex;\n  \t\t}\n  \t},\n\n  \t_setAutoZIndex: function (compare) {\n  \t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n  \t\tvar layers = this.getPane().children,\n  \t\t    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n  \t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n  \t\t\tzIndex = layers[i].style.zIndex;\n\n  \t\t\tif (layers[i] !== this._container && zIndex) {\n  \t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n  \t\t\t}\n  \t\t}\n\n  \t\tif (isFinite(edgeZIndex)) {\n  \t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n  \t\t\tthis._updateZIndex();\n  \t\t}\n  \t},\n\n  \t_updateOpacity: function () {\n  \t\tif (!this._map) { return; }\n\n  \t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n  \t\tif (Browser.ielt9) { return; }\n\n  \t\tsetOpacity(this._container, this.options.opacity);\n\n  \t\tvar now = +new Date(),\n  \t\t    nextFrame = false,\n  \t\t    willPrune = false;\n\n  \t\tfor (var key in this._tiles) {\n  \t\t\tvar tile = this._tiles[key];\n  \t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n  \t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n  \t\t\tsetOpacity(tile.el, fade);\n  \t\t\tif (fade < 1) {\n  \t\t\t\tnextFrame = true;\n  \t\t\t} else {\n  \t\t\t\tif (tile.active) {\n  \t\t\t\t\twillPrune = true;\n  \t\t\t\t} else {\n  \t\t\t\t\tthis._onOpaqueTile(tile);\n  \t\t\t\t}\n  \t\t\t\ttile.active = true;\n  \t\t\t}\n  \t\t}\n\n  \t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n  \t\tif (nextFrame) {\n  \t\t\tcancelAnimFrame(this._fadeFrame);\n  \t\t\tthis._fadeFrame = requestAnimFrame(this._updateOpacity, this);\n  \t\t}\n  \t},\n\n  \t_onOpaqueTile: falseFn,\n\n  \t_initContainer: function () {\n  \t\tif (this._container) { return; }\n\n  \t\tthis._container = create$1('div', 'leaflet-layer ' + (this.options.className || ''));\n  \t\tthis._updateZIndex();\n\n  \t\tif (this.options.opacity < 1) {\n  \t\t\tthis._updateOpacity();\n  \t\t}\n\n  \t\tthis.getPane().appendChild(this._container);\n  \t},\n\n  \t_updateLevels: function () {\n\n  \t\tvar zoom = this._tileZoom,\n  \t\t    maxZoom = this.options.maxZoom;\n\n  \t\tif (zoom === undefined) { return undefined; }\n\n  \t\tfor (var z in this._levels) {\n  \t\t\tz = Number(z);\n  \t\t\tif (this._levels[z].el.children.length || z === zoom) {\n  \t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n  \t\t\t\tthis._onUpdateLevel(z);\n  \t\t\t} else {\n  \t\t\t\tremove(this._levels[z].el);\n  \t\t\t\tthis._removeTilesAtZoom(z);\n  \t\t\t\tthis._onRemoveLevel(z);\n  \t\t\t\tdelete this._levels[z];\n  \t\t\t}\n  \t\t}\n\n  \t\tvar level = this._levels[zoom],\n  \t\t    map = this._map;\n\n  \t\tif (!level) {\n  \t\t\tlevel = this._levels[zoom] = {};\n\n  \t\t\tlevel.el = create$1('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n  \t\t\tlevel.el.style.zIndex = maxZoom;\n\n  \t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n  \t\t\tlevel.zoom = zoom;\n\n  \t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n  \t\t\t// force the browser to consider the newly added element for transition\n  \t\t\tfalseFn(level.el.offsetWidth);\n\n  \t\t\tthis._onCreateLevel(level);\n  \t\t}\n\n  \t\tthis._level = level;\n\n  \t\treturn level;\n  \t},\n\n  \t_onUpdateLevel: falseFn,\n\n  \t_onRemoveLevel: falseFn,\n\n  \t_onCreateLevel: falseFn,\n\n  \t_pruneTiles: function () {\n  \t\tif (!this._map) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tvar key, tile;\n\n  \t\tvar zoom = this._map.getZoom();\n  \t\tif (zoom > this.options.maxZoom ||\n  \t\t\tzoom < this.options.minZoom) {\n  \t\t\tthis._removeAllTiles();\n  \t\t\treturn;\n  \t\t}\n\n  \t\tfor (key in this._tiles) {\n  \t\t\ttile = this._tiles[key];\n  \t\t\ttile.retain = tile.current;\n  \t\t}\n\n  \t\tfor (key in this._tiles) {\n  \t\t\ttile = this._tiles[key];\n  \t\t\tif (tile.current && !tile.active) {\n  \t\t\t\tvar coords = tile.coords;\n  \t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n  \t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\tfor (key in this._tiles) {\n  \t\t\tif (!this._tiles[key].retain) {\n  \t\t\t\tthis._removeTile(key);\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \t_removeTilesAtZoom: function (zoom) {\n  \t\tfor (var key in this._tiles) {\n  \t\t\tif (this._tiles[key].coords.z !== zoom) {\n  \t\t\t\tcontinue;\n  \t\t\t}\n  \t\t\tthis._removeTile(key);\n  \t\t}\n  \t},\n\n  \t_removeAllTiles: function () {\n  \t\tfor (var key in this._tiles) {\n  \t\t\tthis._removeTile(key);\n  \t\t}\n  \t},\n\n  \t_invalidateAll: function () {\n  \t\tfor (var z in this._levels) {\n  \t\t\tremove(this._levels[z].el);\n  \t\t\tthis._onRemoveLevel(Number(z));\n  \t\t\tdelete this._levels[z];\n  \t\t}\n  \t\tthis._removeAllTiles();\n\n  \t\tthis._tileZoom = undefined;\n  \t},\n\n  \t_retainParent: function (x, y, z, minZoom) {\n  \t\tvar x2 = Math.floor(x / 2),\n  \t\t    y2 = Math.floor(y / 2),\n  \t\t    z2 = z - 1,\n  \t\t    coords2 = new Point(+x2, +y2);\n  \t\tcoords2.z = +z2;\n\n  \t\tvar key = this._tileCoordsToKey(coords2),\n  \t\t    tile = this._tiles[key];\n\n  \t\tif (tile && tile.active) {\n  \t\t\ttile.retain = true;\n  \t\t\treturn true;\n\n  \t\t} else if (tile && tile.loaded) {\n  \t\t\ttile.retain = true;\n  \t\t}\n\n  \t\tif (z2 > minZoom) {\n  \t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n  \t\t}\n\n  \t\treturn false;\n  \t},\n\n  \t_retainChildren: function (x, y, z, maxZoom) {\n\n  \t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n  \t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n  \t\t\t\tvar coords = new Point(i, j);\n  \t\t\t\tcoords.z = z + 1;\n\n  \t\t\t\tvar key = this._tileCoordsToKey(coords),\n  \t\t\t\t    tile = this._tiles[key];\n\n  \t\t\t\tif (tile && tile.active) {\n  \t\t\t\t\ttile.retain = true;\n  \t\t\t\t\tcontinue;\n\n  \t\t\t\t} else if (tile && tile.loaded) {\n  \t\t\t\t\ttile.retain = true;\n  \t\t\t\t}\n\n  \t\t\t\tif (z + 1 < maxZoom) {\n  \t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \t_resetView: function (e) {\n  \t\tvar animating = e && (e.pinch || e.flyTo);\n  \t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n  \t},\n\n  \t_animateZoom: function (e) {\n  \t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n  \t},\n\n  \t_clampZoom: function (zoom) {\n  \t\tvar options = this.options;\n\n  \t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n  \t\t\treturn options.minNativeZoom;\n  \t\t}\n\n  \t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n  \t\t\treturn options.maxNativeZoom;\n  \t\t}\n\n  \t\treturn zoom;\n  \t},\n\n  \t_setView: function (center, zoom, noPrune, noUpdate) {\n  \t\tvar tileZoom = Math.round(zoom);\n  \t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n  \t\t    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n  \t\t\ttileZoom = undefined;\n  \t\t} else {\n  \t\t\ttileZoom = this._clampZoom(tileZoom);\n  \t\t}\n\n  \t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n  \t\tif (!noUpdate || tileZoomChanged) {\n\n  \t\t\tthis._tileZoom = tileZoom;\n\n  \t\t\tif (this._abortLoading) {\n  \t\t\t\tthis._abortLoading();\n  \t\t\t}\n\n  \t\t\tthis._updateLevels();\n  \t\t\tthis._resetGrid();\n\n  \t\t\tif (tileZoom !== undefined) {\n  \t\t\t\tthis._update(center);\n  \t\t\t}\n\n  \t\t\tif (!noPrune) {\n  \t\t\t\tthis._pruneTiles();\n  \t\t\t}\n\n  \t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n  \t\t\t// a zoom anim or a pinch gesture\n  \t\t\tthis._noPrune = !!noPrune;\n  \t\t}\n\n  \t\tthis._setZoomTransforms(center, zoom);\n  \t},\n\n  \t_setZoomTransforms: function (center, zoom) {\n  \t\tfor (var i in this._levels) {\n  \t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n  \t\t}\n  \t},\n\n  \t_setZoomTransform: function (level, center, zoom) {\n  \t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n  \t\t    translate = level.origin.multiplyBy(scale)\n  \t\t        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n  \t\tif (Browser.any3d) {\n  \t\t\tsetTransform(level.el, translate, scale);\n  \t\t} else {\n  \t\t\tsetPosition(level.el, translate);\n  \t\t}\n  \t},\n\n  \t_resetGrid: function () {\n  \t\tvar map = this._map,\n  \t\t    crs = map.options.crs,\n  \t\t    tileSize = this._tileSize = this.getTileSize(),\n  \t\t    tileZoom = this._tileZoom;\n\n  \t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n  \t\tif (bounds) {\n  \t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n  \t\t}\n\n  \t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n  \t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n  \t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n  \t\t];\n  \t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n  \t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n  \t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n  \t\t];\n  \t},\n\n  \t_onMoveEnd: function () {\n  \t\tif (!this._map || this._map._animatingZoom) { return; }\n\n  \t\tthis._update();\n  \t},\n\n  \t_getTiledPixelBounds: function (center) {\n  \t\tvar map = this._map,\n  \t\t    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n  \t\t    scale = map.getZoomScale(mapZoom, this._tileZoom),\n  \t\t    pixelCenter = map.project(center, this._tileZoom).floor(),\n  \t\t    halfSize = map.getSize().divideBy(scale * 2);\n\n  \t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n  \t},\n\n  \t// Private method to load tiles in the grid's active zoom level according to map bounds\n  \t_update: function (center) {\n  \t\tvar map = this._map;\n  \t\tif (!map) { return; }\n  \t\tvar zoom = this._clampZoom(map.getZoom());\n\n  \t\tif (center === undefined) { center = map.getCenter(); }\n  \t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n  \t\tvar pixelBounds = this._getTiledPixelBounds(center),\n  \t\t    tileRange = this._pxBoundsToTileRange(pixelBounds),\n  \t\t    tileCenter = tileRange.getCenter(),\n  \t\t    queue = [],\n  \t\t    margin = this.options.keepBuffer,\n  \t\t    noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n  \t\t                              tileRange.getTopRight().add([margin, -margin]));\n\n  \t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n  \t\tif (!(isFinite(tileRange.min.x) &&\n  \t\t      isFinite(tileRange.min.y) &&\n  \t\t      isFinite(tileRange.max.x) &&\n  \t\t      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n  \t\tfor (var key in this._tiles) {\n  \t\t\tvar c = this._tiles[key].coords;\n  \t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n  \t\t\t\tthis._tiles[key].current = false;\n  \t\t\t}\n  \t\t}\n\n  \t\t// _update just loads more tiles. If the tile zoom level differs too much\n  \t\t// from the map's, let _setView reset levels and prune old tiles.\n  \t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n  \t\t// create a queue of coordinates to load tiles from\n  \t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n  \t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n  \t\t\t\tvar coords = new Point(i, j);\n  \t\t\t\tcoords.z = this._tileZoom;\n\n  \t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n  \t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n  \t\t\t\tif (tile) {\n  \t\t\t\t\ttile.current = true;\n  \t\t\t\t} else {\n  \t\t\t\t\tqueue.push(coords);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\t// sort tile queue to load tiles in order of their distance to center\n  \t\tqueue.sort(function (a, b) {\n  \t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n  \t\t});\n\n  \t\tif (queue.length !== 0) {\n  \t\t\t// if it's the first batch of tiles to load\n  \t\t\tif (!this._loading) {\n  \t\t\t\tthis._loading = true;\n  \t\t\t\t// @event loading: Event\n  \t\t\t\t// Fired when the grid layer starts loading tiles.\n  \t\t\t\tthis.fire('loading');\n  \t\t\t}\n\n  \t\t\t// create DOM fragment to append tiles in one batch\n  \t\t\tvar fragment = document.createDocumentFragment();\n\n  \t\t\tfor (i = 0; i < queue.length; i++) {\n  \t\t\t\tthis._addTile(queue[i], fragment);\n  \t\t\t}\n\n  \t\t\tthis._level.el.appendChild(fragment);\n  \t\t}\n  \t},\n\n  \t_isValidTile: function (coords) {\n  \t\tvar crs = this._map.options.crs;\n\n  \t\tif (!crs.infinite) {\n  \t\t\t// don't load tile if it's out of bounds and not wrapped\n  \t\t\tvar bounds = this._globalTileRange;\n  \t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n  \t\t\t    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n  \t\t}\n\n  \t\tif (!this.options.bounds) { return true; }\n\n  \t\t// don't load tile if it doesn't intersect the bounds in options\n  \t\tvar tileBounds = this._tileCoordsToBounds(coords);\n  \t\treturn toLatLngBounds(this.options.bounds).overlaps(tileBounds);\n  \t},\n\n  \t_keyToBounds: function (key) {\n  \t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n  \t},\n\n  \t_tileCoordsToNwSe: function (coords) {\n  \t\tvar map = this._map,\n  \t\t    tileSize = this.getTileSize(),\n  \t\t    nwPoint = coords.scaleBy(tileSize),\n  \t\t    sePoint = nwPoint.add(tileSize),\n  \t\t    nw = map.unproject(nwPoint, coords.z),\n  \t\t    se = map.unproject(sePoint, coords.z);\n  \t\treturn [nw, se];\n  \t},\n\n  \t// converts tile coordinates to its geographical bounds\n  \t_tileCoordsToBounds: function (coords) {\n  \t\tvar bp = this._tileCoordsToNwSe(coords),\n  \t\t    bounds = new LatLngBounds(bp[0], bp[1]);\n\n  \t\tif (!this.options.noWrap) {\n  \t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n  \t\t}\n  \t\treturn bounds;\n  \t},\n  \t// converts tile coordinates to key for the tile cache\n  \t_tileCoordsToKey: function (coords) {\n  \t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n  \t},\n\n  \t// converts tile cache key to coordinates\n  \t_keyToTileCoords: function (key) {\n  \t\tvar k = key.split(':'),\n  \t\t    coords = new Point(+k[0], +k[1]);\n  \t\tcoords.z = +k[2];\n  \t\treturn coords;\n  \t},\n\n  \t_removeTile: function (key) {\n  \t\tvar tile = this._tiles[key];\n  \t\tif (!tile) { return; }\n\n  \t\tremove(tile.el);\n\n  \t\tdelete this._tiles[key];\n\n  \t\t// @event tileunload: TileEvent\n  \t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n  \t\tthis.fire('tileunload', {\n  \t\t\ttile: tile.el,\n  \t\t\tcoords: this._keyToTileCoords(key)\n  \t\t});\n  \t},\n\n  \t_initTile: function (tile) {\n  \t\taddClass(tile, 'leaflet-tile');\n\n  \t\tvar tileSize = this.getTileSize();\n  \t\ttile.style.width = tileSize.x + 'px';\n  \t\ttile.style.height = tileSize.y + 'px';\n\n  \t\ttile.onselectstart = falseFn;\n  \t\ttile.onmousemove = falseFn;\n\n  \t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n  \t\tif (Browser.ielt9 && this.options.opacity < 1) {\n  \t\t\tsetOpacity(tile, this.options.opacity);\n  \t\t}\n  \t},\n\n  \t_addTile: function (coords, container) {\n  \t\tvar tilePos = this._getTilePos(coords),\n  \t\t    key = this._tileCoordsToKey(coords);\n\n  \t\tvar tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords));\n\n  \t\tthis._initTile(tile);\n\n  \t\t// if createTile is defined with a second argument (\"done\" callback),\n  \t\t// we know that tile is async and will be ready later; otherwise\n  \t\tif (this.createTile.length < 2) {\n  \t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n  \t\t\trequestAnimFrame(bind(this._tileReady, this, coords, null, tile));\n  \t\t}\n\n  \t\tsetPosition(tile, tilePos);\n\n  \t\t// save tile in cache\n  \t\tthis._tiles[key] = {\n  \t\t\tel: tile,\n  \t\t\tcoords: coords,\n  \t\t\tcurrent: true\n  \t\t};\n\n  \t\tcontainer.appendChild(tile);\n  \t\t// @event tileloadstart: TileEvent\n  \t\t// Fired when a tile is requested and starts loading.\n  \t\tthis.fire('tileloadstart', {\n  \t\t\ttile: tile,\n  \t\t\tcoords: coords\n  \t\t});\n  \t},\n\n  \t_tileReady: function (coords, err, tile) {\n  \t\tif (err) {\n  \t\t\t// @event tileerror: TileErrorEvent\n  \t\t\t// Fired when there is an error loading a tile.\n  \t\t\tthis.fire('tileerror', {\n  \t\t\t\terror: err,\n  \t\t\t\ttile: tile,\n  \t\t\t\tcoords: coords\n  \t\t\t});\n  \t\t}\n\n  \t\tvar key = this._tileCoordsToKey(coords);\n\n  \t\ttile = this._tiles[key];\n  \t\tif (!tile) { return; }\n\n  \t\ttile.loaded = +new Date();\n  \t\tif (this._map._fadeAnimated) {\n  \t\t\tsetOpacity(tile.el, 0);\n  \t\t\tcancelAnimFrame(this._fadeFrame);\n  \t\t\tthis._fadeFrame = requestAnimFrame(this._updateOpacity, this);\n  \t\t} else {\n  \t\t\ttile.active = true;\n  \t\t\tthis._pruneTiles();\n  \t\t}\n\n  \t\tif (!err) {\n  \t\t\taddClass(tile.el, 'leaflet-tile-loaded');\n\n  \t\t\t// @event tileload: TileEvent\n  \t\t\t// Fired when a tile loads.\n  \t\t\tthis.fire('tileload', {\n  \t\t\t\ttile: tile.el,\n  \t\t\t\tcoords: coords\n  \t\t\t});\n  \t\t}\n\n  \t\tif (this._noTilesToLoad()) {\n  \t\t\tthis._loading = false;\n  \t\t\t// @event load: Event\n  \t\t\t// Fired when the grid layer loaded all visible tiles.\n  \t\t\tthis.fire('load');\n\n  \t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n  \t\t\t\trequestAnimFrame(this._pruneTiles, this);\n  \t\t\t} else {\n  \t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n  \t\t\t\t// to trigger a pruning.\n  \t\t\t\tsetTimeout(bind(this._pruneTiles, this), 250);\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \t_getTilePos: function (coords) {\n  \t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n  \t},\n\n  \t_wrapCoords: function (coords) {\n  \t\tvar newCoords = new Point(\n  \t\t\tthis._wrapX ? wrapNum(coords.x, this._wrapX) : coords.x,\n  \t\t\tthis._wrapY ? wrapNum(coords.y, this._wrapY) : coords.y);\n  \t\tnewCoords.z = coords.z;\n  \t\treturn newCoords;\n  \t},\n\n  \t_pxBoundsToTileRange: function (bounds) {\n  \t\tvar tileSize = this.getTileSize();\n  \t\treturn new Bounds(\n  \t\t\tbounds.min.unscaleBy(tileSize).floor(),\n  \t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n  \t},\n\n  \t_noTilesToLoad: function () {\n  \t\tfor (var key in this._tiles) {\n  \t\t\tif (!this._tiles[key].loaded) { return false; }\n  \t\t}\n  \t\treturn true;\n  \t}\n  });\n\n  // @factory L.gridLayer(options?: GridLayer options)\n  // Creates a new instance of GridLayer with the supplied options.\n  function gridLayer(options) {\n  \treturn new GridLayer(options);\n  }\n\n  /*\r\n   * @class TileLayer\r\n   * @inherits GridLayer\r\n   * @aka L.TileLayer\r\n   * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(map);\n   * ```\r\n   *\r\n   * @section URL template\r\n   * @example\r\n   *\r\n   * A string of the following form:\r\n   *\r\n   * ```\r\n   * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n   * ```\r\n   *\r\n   * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \"&commat;2x\" to the URL to load retina tiles.\r\n   *\r\n   * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n   *\r\n   * ```\r\n   * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n   * ```\r\n   */\r\n\r\n\r\n  var TileLayer = GridLayer.extend({\r\n\r\n  \t// @section\r\n  \t// @aka TileLayer options\r\n  \toptions: {\r\n  \t\t// @option minZoom: Number = 0\r\n  \t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n  \t\tminZoom: 0,\r\n\r\n  \t\t// @option maxZoom: Number = 18\r\n  \t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n  \t\tmaxZoom: 18,\r\n\r\n  \t\t// @option subdomains: String|String[] = 'abc'\r\n  \t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n  \t\tsubdomains: 'abc',\r\n\r\n  \t\t// @option errorTileUrl: String = ''\r\n  \t\t// URL to the tile image to show in place of the tile that failed to load.\r\n  \t\terrorTileUrl: '',\r\n\r\n  \t\t// @option zoomOffset: Number = 0\r\n  \t\t// The zoom number used in tile URLs will be offset with this value.\r\n  \t\tzoomOffset: 0,\r\n\r\n  \t\t// @option tms: Boolean = false\r\n  \t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n  \t\ttms: false,\r\n\r\n  \t\t// @option zoomReverse: Boolean = false\r\n  \t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n  \t\tzoomReverse: false,\r\n\r\n  \t\t// @option detectRetina: Boolean = false\r\n  \t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n  \t\tdetectRetina: false,\r\n\r\n  \t\t// @option crossOrigin: Boolean|String = false\r\n  \t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n  \t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n  \t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n  \t\tcrossOrigin: false,\r\n\r\n  \t\t// @option referrerPolicy: Boolean|String = false\r\n  \t\t// Whether the referrerPolicy attribute will be added to the tiles.\r\n  \t\t// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.\r\n  \t\t// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer\r\n  \t\t// (e.g. to validate an API token).\r\n  \t\t// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.\r\n  \t\treferrerPolicy: false\r\n  \t},\r\n\r\n  \tinitialize: function (url, options) {\r\n\r\n  \t\tthis._url = url;\r\n\r\n  \t\toptions = setOptions(this, options);\r\n\r\n  \t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n  \t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n  \t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n  \t\t\tif (!options.zoomReverse) {\r\n  \t\t\t\toptions.zoomOffset++;\r\n  \t\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);\r\n  \t\t\t} else {\r\n  \t\t\t\toptions.zoomOffset--;\r\n  \t\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom + 1);\r\n  \t\t\t}\r\n\r\n  \t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n  \t\t} else if (!options.zoomReverse) {\r\n  \t\t\t// make sure maxZoom is gte minZoom\r\n  \t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom);\r\n  \t\t} else {\r\n  \t\t\t// make sure minZoom is lte maxZoom\r\n  \t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom);\r\n  \t\t}\r\n\r\n  \t\tif (typeof options.subdomains === 'string') {\r\n  \t\t\toptions.subdomains = options.subdomains.split('');\r\n  \t\t}\r\n\r\n  \t\tthis.on('tileunload', this._onTileRemove);\r\n  \t},\r\n\r\n  \t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n  \t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n  \t// If the URL does not change, the layer will not be redrawn unless\r\n  \t// the noRedraw parameter is set to false.\r\n  \tsetUrl: function (url, noRedraw) {\r\n  \t\tif (this._url === url && noRedraw === undefined) {\r\n  \t\t\tnoRedraw = true;\r\n  \t\t}\r\n\r\n  \t\tthis._url = url;\r\n\r\n  \t\tif (!noRedraw) {\r\n  \t\t\tthis.redraw();\r\n  \t\t}\r\n  \t\treturn this;\r\n  \t},\r\n\r\n  \t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n  \t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n  \t// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\r\n  \t// callback is called when the tile has been loaded.\r\n  \tcreateTile: function (coords, done) {\r\n  \t\tvar tile = document.createElement('img');\r\n\r\n  \t\ton(tile, 'load', bind(this._tileOnLoad, this, done, tile));\r\n  \t\ton(tile, 'error', bind(this._tileOnError, this, done, tile));\r\n\r\n  \t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n  \t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n  \t\t}\r\n\r\n  \t\t// for this new option we follow the documented behavior\r\n  \t\t// more closely by only setting the property when string\r\n  \t\tif (typeof this.options.referrerPolicy === 'string') {\r\n  \t\t\ttile.referrerPolicy = this.options.referrerPolicy;\r\n  \t\t}\r\n\r\n  \t\t// The alt attribute is set to the empty string,\r\n  \t\t// allowing screen readers to ignore the decorative image tiles.\r\n  \t\t// https://www.w3.org/WAI/tutorials/images/decorative/\r\n  \t\t// https://www.w3.org/TR/html-aria/#el-img-empty-alt\r\n  \t\ttile.alt = '';\r\n\r\n  \t\ttile.src = this.getTileUrl(coords);\r\n\r\n  \t\treturn tile;\r\n  \t},\r\n\r\n  \t// @section Extension methods\r\n  \t// @uninheritable\r\n  \t// Layers extending `TileLayer` might reimplement the following method.\r\n  \t// @method getTileUrl(coords: Object): String\r\n  \t// Called only internally, returns the URL for a tile given its coordinates.\r\n  \t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n  \tgetTileUrl: function (coords) {\r\n  \t\tvar data = {\r\n  \t\t\tr: Browser.retina ? '@2x' : '',\r\n  \t\t\ts: this._getSubdomain(coords),\r\n  \t\t\tx: coords.x,\r\n  \t\t\ty: coords.y,\r\n  \t\t\tz: this._getZoomForUrl()\r\n  \t\t};\r\n  \t\tif (this._map && !this._map.options.crs.infinite) {\r\n  \t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n  \t\t\tif (this.options.tms) {\r\n  \t\t\t\tdata['y'] = invertedY;\r\n  \t\t\t}\r\n  \t\t\tdata['-y'] = invertedY;\r\n  \t\t}\r\n\r\n  \t\treturn template(this._url, extend(data, this.options));\r\n  \t},\r\n\r\n  \t_tileOnLoad: function (done, tile) {\r\n  \t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n  \t\tif (Browser.ielt9) {\r\n  \t\t\tsetTimeout(bind(done, this, null, tile), 0);\r\n  \t\t} else {\r\n  \t\t\tdone(null, tile);\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_tileOnError: function (done, tile, e) {\r\n  \t\tvar errorUrl = this.options.errorTileUrl;\r\n  \t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n  \t\t\ttile.src = errorUrl;\r\n  \t\t}\r\n  \t\tdone(e, tile);\r\n  \t},\r\n\r\n  \t_onTileRemove: function (e) {\r\n  \t\te.tile.onload = null;\r\n  \t},\r\n\r\n  \t_getZoomForUrl: function () {\r\n  \t\tvar zoom = this._tileZoom,\r\n  \t\tmaxZoom = this.options.maxZoom,\r\n  \t\tzoomReverse = this.options.zoomReverse,\r\n  \t\tzoomOffset = this.options.zoomOffset;\r\n\r\n  \t\tif (zoomReverse) {\r\n  \t\t\tzoom = maxZoom - zoom;\r\n  \t\t}\r\n\r\n  \t\treturn zoom + zoomOffset;\r\n  \t},\r\n\r\n  \t_getSubdomain: function (tilePoint) {\r\n  \t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n  \t\treturn this.options.subdomains[index];\r\n  \t},\r\n\r\n  \t// stops loading all tiles in the background layer\r\n  \t_abortLoading: function () {\r\n  \t\tvar i, tile;\r\n  \t\tfor (i in this._tiles) {\r\n  \t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n  \t\t\t\ttile = this._tiles[i].el;\r\n\r\n  \t\t\t\ttile.onload = falseFn;\r\n  \t\t\t\ttile.onerror = falseFn;\r\n\r\n  \t\t\t\tif (!tile.complete) {\r\n  \t\t\t\t\ttile.src = emptyImageUrl;\r\n  \t\t\t\t\tvar coords = this._tiles[i].coords;\r\n  \t\t\t\t\tremove(tile);\r\n  \t\t\t\t\tdelete this._tiles[i];\r\n  \t\t\t\t\t// @event tileabort: TileEvent\r\n  \t\t\t\t\t// Fired when a tile was loading but is now not wanted.\r\n  \t\t\t\t\tthis.fire('tileabort', {\r\n  \t\t\t\t\t\ttile: tile,\r\n  \t\t\t\t\t\tcoords: coords\r\n  \t\t\t\t\t});\r\n  \t\t\t\t}\r\n  \t\t\t}\r\n  \t\t}\r\n  \t},\r\n\r\n  \t_removeTile: function (key) {\r\n  \t\tvar tile = this._tiles[key];\r\n  \t\tif (!tile) { return; }\r\n\r\n  \t\t// Cancels any pending http requests associated with the tile\r\n  \t\ttile.el.setAttribute('src', emptyImageUrl);\r\n\r\n  \t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n  \t},\r\n\r\n  \t_tileReady: function (coords, err, tile) {\r\n  \t\tif (!this._map || (tile && tile.getAttribute('src') === emptyImageUrl)) {\r\n  \t\t\treturn;\r\n  \t\t}\r\n\r\n  \t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n  \t}\r\n  });\r\n\r\n\r\n  // @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n  // Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\n  function tileLayer(url, options) {\r\n  \treturn new TileLayer(url, options);\r\n  }\n\n  /*\r\n   * @class TileLayer.WMS\r\n   * @inherits TileLayer\r\n   * @aka L.TileLayer.WMS\r\n   * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n   *\r\n   * @example\r\n   *\r\n   * ```js\r\n   * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n   * \tlayers: 'nexrad-n0r-900913',\r\n   * \tformat: 'image/png',\r\n   * \ttransparent: true,\r\n   * \tattribution: \"Weather data © 2012 IEM Nexrad\"\r\n   * });\r\n   * ```\r\n   */\r\n\r\n  var TileLayerWMS = TileLayer.extend({\r\n\r\n  \t// @section\r\n  \t// @aka TileLayer.WMS options\r\n  \t// If any custom options not documented here are used, they will be sent to the\r\n  \t// WMS server as extra parameters in each request URL. This can be useful for\r\n  \t// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n  \tdefaultWmsParams: {\r\n  \t\tservice: 'WMS',\r\n  \t\trequest: 'GetMap',\r\n\r\n  \t\t// @option layers: String = ''\r\n  \t\t// **(required)** Comma-separated list of WMS layers to show.\r\n  \t\tlayers: '',\r\n\r\n  \t\t// @option styles: String = ''\r\n  \t\t// Comma-separated list of WMS styles.\r\n  \t\tstyles: '',\r\n\r\n  \t\t// @option format: String = 'image/jpeg'\r\n  \t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n  \t\tformat: 'image/jpeg',\r\n\r\n  \t\t// @option transparent: Boolean = false\r\n  \t\t// If `true`, the WMS service will return images with transparency.\r\n  \t\ttransparent: false,\r\n\r\n  \t\t// @option version: String = '1.1.1'\r\n  \t\t// Version of the WMS service to use\r\n  \t\tversion: '1.1.1'\r\n  \t},\r\n\r\n  \toptions: {\r\n  \t\t// @option crs: CRS = null\r\n  \t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n  \t\t// map CRS. Don't change this if you're not sure what it means.\r\n  \t\tcrs: null,\r\n\r\n  \t\t// @option uppercase: Boolean = false\r\n  \t\t// If `true`, WMS request parameter keys will be uppercase.\r\n  \t\tuppercase: false\r\n  \t},\r\n\r\n  \tinitialize: function (url, options) {\r\n\r\n  \t\tthis._url = url;\r\n\r\n  \t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n  \t\t// all keys that are not TileLayer options go to WMS params\r\n  \t\tfor (var i in options) {\r\n  \t\t\tif (!(i in this.options)) {\r\n  \t\t\t\twmsParams[i] = options[i];\r\n  \t\t\t}\r\n  \t\t}\r\n\r\n  \t\toptions = setOptions(this, options);\r\n\r\n  \t\tvar realRetina = options.detectRetina && Browser.retina ? 2 : 1;\r\n  \t\tvar tileSize = this.getTileSize();\r\n  \t\twmsParams.width = tileSize.x * realRetina;\r\n  \t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n  \t\tthis.wmsParams = wmsParams;\r\n  \t},\r\n\r\n  \tonAdd: function (map) {\r\n\r\n  \t\tthis._crs = this.options.crs || map.options.crs;\r\n  \t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n  \t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n  \t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n  \t\tTileLayer.prototype.onAdd.call(this, map);\r\n  \t},\r\n\r\n  \tgetTileUrl: function (coords) {\r\n\r\n  \t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n  \t\t    crs = this._crs,\r\n  \t\t    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n  \t\t    min = bounds.min,\r\n  \t\t    max = bounds.max,\r\n  \t\t    bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n  \t\t    [min.y, min.x, max.y, max.x] :\r\n  \t\t    [min.x, min.y, max.x, max.y]).join(','),\r\n  \t\t    url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n  \t\treturn url +\r\n  \t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n  \t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n  \t},\r\n\r\n  \t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n  \t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n  \tsetParams: function (params, noRedraw) {\r\n\r\n  \t\textend(this.wmsParams, params);\r\n\r\n  \t\tif (!noRedraw) {\r\n  \t\t\tthis.redraw();\r\n  \t\t}\r\n\r\n  \t\treturn this;\r\n  \t}\r\n  });\r\n\r\n\r\n  // @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n  // Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\n  function tileLayerWMS(url, options) {\r\n  \treturn new TileLayerWMS(url, options);\r\n  }\n\n  TileLayer.WMS = TileLayerWMS;\n  tileLayer.wms = tileLayerWMS;\n\n  /*\n   * @class Renderer\n   * @inherits Layer\n   * @aka L.Renderer\n   *\n   * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n   * DOM container of the renderer, its bounds, and its zoom animation.\n   *\n   * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n   * itself can be added or removed to the map. All paths use a renderer, which can\n   * be implicit (the map will decide the type of renderer and use it automatically)\n   * or explicit (using the [`renderer`](#path-renderer) option of the path).\n   *\n   * Do not use this class directly, use `SVG` and `Canvas` instead.\n   *\n   * @event update: Event\n   * Fired when the renderer updates its bounds, center and zoom, for example when\n   * its map has moved\n   */\n\n  var Renderer = Layer.extend({\n\n  \t// @section\n  \t// @aka Renderer options\n  \toptions: {\n  \t\t// @option padding: Number = 0.1\n  \t\t// How much to extend the clip area around the map view (relative to its size)\n  \t\t// e.g. 0.1 would be 10% of map view in each direction\n  \t\tpadding: 0.1\n  \t},\n\n  \tinitialize: function (options) {\n  \t\tsetOptions(this, options);\n  \t\tstamp(this);\n  \t\tthis._layers = this._layers || {};\n  \t},\n\n  \tonAdd: function () {\n  \t\tif (!this._container) {\n  \t\t\tthis._initContainer(); // defined by renderer implementations\n\n  \t\t\tif (this._zoomAnimated) {\n  \t\t\t\taddClass(this._container, 'leaflet-zoom-animated');\n  \t\t\t}\n  \t\t}\n\n  \t\tthis.getPane().appendChild(this._container);\n  \t\tthis._update();\n  \t\tthis.on('update', this._updatePaths, this);\n  \t},\n\n  \tonRemove: function () {\n  \t\tthis.off('update', this._updatePaths, this);\n  \t\tthis._destroyContainer();\n  \t},\n\n  \tgetEvents: function () {\n  \t\tvar events = {\n  \t\t\tviewreset: this._reset,\n  \t\t\tzoom: this._onZoom,\n  \t\t\tmoveend: this._update,\n  \t\t\tzoomend: this._onZoomEnd\n  \t\t};\n  \t\tif (this._zoomAnimated) {\n  \t\t\tevents.zoomanim = this._onAnimZoom;\n  \t\t}\n  \t\treturn events;\n  \t},\n\n  \t_onAnimZoom: function (ev) {\n  \t\tthis._updateTransform(ev.center, ev.zoom);\n  \t},\n\n  \t_onZoom: function () {\n  \t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n  \t},\n\n  \t_updateTransform: function (center, zoom) {\n  \t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n  \t\t    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n  \t\t    currentCenterPoint = this._map.project(this._center, zoom),\n\n  \t\t    topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)\n  \t\t\t\t  .subtract(this._map._getNewPixelOrigin(center, zoom));\n\n  \t\tif (Browser.any3d) {\n  \t\t\tsetTransform(this._container, topLeftOffset, scale);\n  \t\t} else {\n  \t\t\tsetPosition(this._container, topLeftOffset);\n  \t\t}\n  \t},\n\n  \t_reset: function () {\n  \t\tthis._update();\n  \t\tthis._updateTransform(this._center, this._zoom);\n\n  \t\tfor (var id in this._layers) {\n  \t\t\tthis._layers[id]._reset();\n  \t\t}\n  \t},\n\n  \t_onZoomEnd: function () {\n  \t\tfor (var id in this._layers) {\n  \t\t\tthis._layers[id]._project();\n  \t\t}\n  \t},\n\n  \t_updatePaths: function () {\n  \t\tfor (var id in this._layers) {\n  \t\t\tthis._layers[id]._update();\n  \t\t}\n  \t},\n\n  \t_update: function () {\n  \t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n  \t\t// Subclasses are responsible of firing the 'update' event.\n  \t\tvar p = this.options.padding,\n  \t\t    size = this._map.getSize(),\n  \t\t    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n  \t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n  \t\tthis._center = this._map.getCenter();\n  \t\tthis._zoom = this._map.getZoom();\n  \t}\n  });\n\n  /*\n   * @class Canvas\n   * @inherits Renderer\n   * @aka L.Canvas\n   *\n   * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n   * Inherits `Renderer`.\n   *\n   * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not\n   * available in all web browsers, notably IE8, and overlapping geometries might\n   * not display properly in some edge cases.\n   *\n   * @example\n   *\n   * Use Canvas by default for all paths in the map:\n   *\n   * ```js\n   * var map = L.map('map', {\n   * \trenderer: L.canvas()\n   * });\n   * ```\n   *\n   * Use a Canvas renderer with extra padding for specific vector geometries:\n   *\n   * ```js\n   * var map = L.map('map');\n   * var myRenderer = L.canvas({ padding: 0.5 });\n   * var line = L.polyline( coordinates, { renderer: myRenderer } );\n   * var circle = L.circle( center, { renderer: myRenderer } );\n   * ```\n   */\n\n  var Canvas = Renderer.extend({\n\n  \t// @section\n  \t// @aka Canvas options\n  \toptions: {\n  \t\t// @option tolerance: Number = 0\n  \t\t// How much to extend the click tolerance around a path/object on the map.\n  \t\ttolerance: 0\n  \t},\n\n  \tgetEvents: function () {\n  \t\tvar events = Renderer.prototype.getEvents.call(this);\n  \t\tevents.viewprereset = this._onViewPreReset;\n  \t\treturn events;\n  \t},\n\n  \t_onViewPreReset: function () {\n  \t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n  \t\tthis._postponeUpdatePaths = true;\n  \t},\n\n  \tonAdd: function () {\n  \t\tRenderer.prototype.onAdd.call(this);\n\n  \t\t// Redraw vectors since canvas is cleared upon removal,\n  \t\t// in case of removing the renderer itself from the map.\n  \t\tthis._draw();\n  \t},\n\n  \t_initContainer: function () {\n  \t\tvar container = this._container = document.createElement('canvas');\n\n  \t\ton(container, 'mousemove', this._onMouseMove, this);\n  \t\ton(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n  \t\ton(container, 'mouseout', this._handleMouseOut, this);\n  \t\tcontainer['_leaflet_disable_events'] = true;\n\n  \t\tthis._ctx = container.getContext('2d');\n  \t},\n\n  \t_destroyContainer: function () {\n  \t\tcancelAnimFrame(this._redrawRequest);\n  \t\tdelete this._ctx;\n  \t\tremove(this._container);\n  \t\toff(this._container);\n  \t\tdelete this._container;\n  \t},\n\n  \t_updatePaths: function () {\n  \t\tif (this._postponeUpdatePaths) { return; }\n\n  \t\tvar layer;\n  \t\tthis._redrawBounds = null;\n  \t\tfor (var id in this._layers) {\n  \t\t\tlayer = this._layers[id];\n  \t\t\tlayer._update();\n  \t\t}\n  \t\tthis._redraw();\n  \t},\n\n  \t_update: function () {\n  \t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n  \t\tRenderer.prototype._update.call(this);\n\n  \t\tvar b = this._bounds,\n  \t\t    container = this._container,\n  \t\t    size = b.getSize(),\n  \t\t    m = Browser.retina ? 2 : 1;\n\n  \t\tsetPosition(container, b.min);\n\n  \t\t// set canvas size (also clearing it); use double size on retina\n  \t\tcontainer.width = m * size.x;\n  \t\tcontainer.height = m * size.y;\n  \t\tcontainer.style.width = size.x + 'px';\n  \t\tcontainer.style.height = size.y + 'px';\n\n  \t\tif (Browser.retina) {\n  \t\t\tthis._ctx.scale(2, 2);\n  \t\t}\n\n  \t\t// translate so we use the same path coordinates after canvas element moves\n  \t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n  \t\t// Tell paths to redraw themselves\n  \t\tthis.fire('update');\n  \t},\n\n  \t_reset: function () {\n  \t\tRenderer.prototype._reset.call(this);\n\n  \t\tif (this._postponeUpdatePaths) {\n  \t\t\tthis._postponeUpdatePaths = false;\n  \t\t\tthis._updatePaths();\n  \t\t}\n  \t},\n\n  \t_initPath: function (layer) {\n  \t\tthis._updateDashArray(layer);\n  \t\tthis._layers[stamp(layer)] = layer;\n\n  \t\tvar order = layer._order = {\n  \t\t\tlayer: layer,\n  \t\t\tprev: this._drawLast,\n  \t\t\tnext: null\n  \t\t};\n  \t\tif (this._drawLast) { this._drawLast.next = order; }\n  \t\tthis._drawLast = order;\n  \t\tthis._drawFirst = this._drawFirst || this._drawLast;\n  \t},\n\n  \t_addPath: function (layer) {\n  \t\tthis._requestRedraw(layer);\n  \t},\n\n  \t_removePath: function (layer) {\n  \t\tvar order = layer._order;\n  \t\tvar next = order.next;\n  \t\tvar prev = order.prev;\n\n  \t\tif (next) {\n  \t\t\tnext.prev = prev;\n  \t\t} else {\n  \t\t\tthis._drawLast = prev;\n  \t\t}\n  \t\tif (prev) {\n  \t\t\tprev.next = next;\n  \t\t} else {\n  \t\t\tthis._drawFirst = next;\n  \t\t}\n\n  \t\tdelete layer._order;\n\n  \t\tdelete this._layers[stamp(layer)];\n\n  \t\tthis._requestRedraw(layer);\n  \t},\n\n  \t_updatePath: function (layer) {\n  \t\t// Redraw the union of the layer's old pixel\n  \t\t// bounds and the new pixel bounds.\n  \t\tthis._extendRedrawBounds(layer);\n  \t\tlayer._project();\n  \t\tlayer._update();\n  \t\t// The redraw will extend the redraw bounds\n  \t\t// with the new pixel bounds.\n  \t\tthis._requestRedraw(layer);\n  \t},\n\n  \t_updateStyle: function (layer) {\n  \t\tthis._updateDashArray(layer);\n  \t\tthis._requestRedraw(layer);\n  \t},\n\n  \t_updateDashArray: function (layer) {\n  \t\tif (typeof layer.options.dashArray === 'string') {\n  \t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n  \t\t\t    dashArray = [],\n  \t\t\t    dashValue,\n  \t\t\t    i;\n  \t\t\tfor (i = 0; i < parts.length; i++) {\n  \t\t\t\tdashValue = Number(parts[i]);\n  \t\t\t\t// Ignore dash array containing invalid lengths\n  \t\t\t\tif (isNaN(dashValue)) { return; }\n  \t\t\t\tdashArray.push(dashValue);\n  \t\t\t}\n  \t\t\tlayer.options._dashArray = dashArray;\n  \t\t} else {\n  \t\t\tlayer.options._dashArray = layer.options.dashArray;\n  \t\t}\n  \t},\n\n  \t_requestRedraw: function (layer) {\n  \t\tif (!this._map) { return; }\n\n  \t\tthis._extendRedrawBounds(layer);\n  \t\tthis._redrawRequest = this._redrawRequest || requestAnimFrame(this._redraw, this);\n  \t},\n\n  \t_extendRedrawBounds: function (layer) {\n  \t\tif (layer._pxBounds) {\n  \t\t\tvar padding = (layer.options.weight || 0) + 1;\n  \t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n  \t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n  \t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n  \t\t}\n  \t},\n\n  \t_redraw: function () {\n  \t\tthis._redrawRequest = null;\n\n  \t\tif (this._redrawBounds) {\n  \t\t\tthis._redrawBounds.min._floor();\n  \t\t\tthis._redrawBounds.max._ceil();\n  \t\t}\n\n  \t\tthis._clear(); // clear layers in redraw bounds\n  \t\tthis._draw(); // draw layers\n\n  \t\tthis._redrawBounds = null;\n  \t},\n\n  \t_clear: function () {\n  \t\tvar bounds = this._redrawBounds;\n  \t\tif (bounds) {\n  \t\t\tvar size = bounds.getSize();\n  \t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n  \t\t} else {\n  \t\t\tthis._ctx.save();\n  \t\t\tthis._ctx.setTransform(1, 0, 0, 1, 0, 0);\n  \t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n  \t\t\tthis._ctx.restore();\n  \t\t}\n  \t},\n\n  \t_draw: function () {\n  \t\tvar layer, bounds = this._redrawBounds;\n  \t\tthis._ctx.save();\n  \t\tif (bounds) {\n  \t\t\tvar size = bounds.getSize();\n  \t\t\tthis._ctx.beginPath();\n  \t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n  \t\t\tthis._ctx.clip();\n  \t\t}\n\n  \t\tthis._drawing = true;\n\n  \t\tfor (var order = this._drawFirst; order; order = order.next) {\n  \t\t\tlayer = order.layer;\n  \t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n  \t\t\t\tlayer._updatePath();\n  \t\t\t}\n  \t\t}\n\n  \t\tthis._drawing = false;\n\n  \t\tthis._ctx.restore();  // Restore state before clipping.\n  \t},\n\n  \t_updatePoly: function (layer, closed) {\n  \t\tif (!this._drawing) { return; }\n\n  \t\tvar i, j, len2, p,\n  \t\t    parts = layer._parts,\n  \t\t    len = parts.length,\n  \t\t    ctx = this._ctx;\n\n  \t\tif (!len) { return; }\n\n  \t\tctx.beginPath();\n\n  \t\tfor (i = 0; i < len; i++) {\n  \t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n  \t\t\t\tp = parts[i][j];\n  \t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n  \t\t\t}\n  \t\t\tif (closed) {\n  \t\t\t\tctx.closePath();\n  \t\t\t}\n  \t\t}\n\n  \t\tthis._fillStroke(ctx, layer);\n\n  \t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n  \t},\n\n  \t_updateCircle: function (layer) {\n\n  \t\tif (!this._drawing || layer._empty()) { return; }\n\n  \t\tvar p = layer._point,\n  \t\t    ctx = this._ctx,\n  \t\t    r = Math.max(Math.round(layer._radius), 1),\n  \t\t    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n  \t\tif (s !== 1) {\n  \t\t\tctx.save();\n  \t\t\tctx.scale(1, s);\n  \t\t}\n\n  \t\tctx.beginPath();\n  \t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n  \t\tif (s !== 1) {\n  \t\t\tctx.restore();\n  \t\t}\n\n  \t\tthis._fillStroke(ctx, layer);\n  \t},\n\n  \t_fillStroke: function (ctx, layer) {\n  \t\tvar options = layer.options;\n\n  \t\tif (options.fill) {\n  \t\t\tctx.globalAlpha = options.fillOpacity;\n  \t\t\tctx.fillStyle = options.fillColor || options.color;\n  \t\t\tctx.fill(options.fillRule || 'evenodd');\n  \t\t}\n\n  \t\tif (options.stroke && options.weight !== 0) {\n  \t\t\tif (ctx.setLineDash) {\n  \t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n  \t\t\t}\n  \t\t\tctx.globalAlpha = options.opacity;\n  \t\t\tctx.lineWidth = options.weight;\n  \t\t\tctx.strokeStyle = options.color;\n  \t\t\tctx.lineCap = options.lineCap;\n  \t\t\tctx.lineJoin = options.lineJoin;\n  \t\t\tctx.stroke();\n  \t\t}\n  \t},\n\n  \t// Canvas obviously doesn't have mouse events for individual drawn objects,\n  \t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n  \t_onClick: function (e) {\n  \t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n  \t\tfor (var order = this._drawFirst; order; order = order.next) {\n  \t\t\tlayer = order.layer;\n  \t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n  \t\t\t\tif (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {\n  \t\t\t\t\tclickedLayer = layer;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t\tthis._fireEvent(clickedLayer ? [clickedLayer] : false, e);\n  \t},\n\n  \t_onMouseMove: function (e) {\n  \t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n  \t\tvar point = this._map.mouseEventToLayerPoint(e);\n  \t\tthis._handleMouseHover(e, point);\n  \t},\n\n\n  \t_handleMouseOut: function (e) {\n  \t\tvar layer = this._hoveredLayer;\n  \t\tif (layer) {\n  \t\t\t// if we're leaving the layer, fire mouseout\n  \t\t\tremoveClass(this._container, 'leaflet-interactive');\n  \t\t\tthis._fireEvent([layer], e, 'mouseout');\n  \t\t\tthis._hoveredLayer = null;\n  \t\t\tthis._mouseHoverThrottled = false;\n  \t\t}\n  \t},\n\n  \t_handleMouseHover: function (e, point) {\n  \t\tif (this._mouseHoverThrottled) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tvar layer, candidateHoveredLayer;\n\n  \t\tfor (var order = this._drawFirst; order; order = order.next) {\n  \t\t\tlayer = order.layer;\n  \t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n  \t\t\t\tcandidateHoveredLayer = layer;\n  \t\t\t}\n  \t\t}\n\n  \t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n  \t\t\tthis._handleMouseOut(e);\n\n  \t\t\tif (candidateHoveredLayer) {\n  \t\t\t\taddClass(this._container, 'leaflet-interactive'); // change cursor\n  \t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n  \t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n  \t\t\t}\n  \t\t}\n\n  \t\tthis._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);\n\n  \t\tthis._mouseHoverThrottled = true;\n  \t\tsetTimeout(bind(function () {\n  \t\t\tthis._mouseHoverThrottled = false;\n  \t\t}, this), 32);\n  \t},\n\n  \t_fireEvent: function (layers, e, type) {\n  \t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n  \t},\n\n  \t_bringToFront: function (layer) {\n  \t\tvar order = layer._order;\n\n  \t\tif (!order) { return; }\n\n  \t\tvar next = order.next;\n  \t\tvar prev = order.prev;\n\n  \t\tif (next) {\n  \t\t\tnext.prev = prev;\n  \t\t} else {\n  \t\t\t// Already last\n  \t\t\treturn;\n  \t\t}\n  \t\tif (prev) {\n  \t\t\tprev.next = next;\n  \t\t} else if (next) {\n  \t\t\t// Update first entry unless this is the\n  \t\t\t// single entry\n  \t\t\tthis._drawFirst = next;\n  \t\t}\n\n  \t\torder.prev = this._drawLast;\n  \t\tthis._drawLast.next = order;\n\n  \t\torder.next = null;\n  \t\tthis._drawLast = order;\n\n  \t\tthis._requestRedraw(layer);\n  \t},\n\n  \t_bringToBack: function (layer) {\n  \t\tvar order = layer._order;\n\n  \t\tif (!order) { return; }\n\n  \t\tvar next = order.next;\n  \t\tvar prev = order.prev;\n\n  \t\tif (prev) {\n  \t\t\tprev.next = next;\n  \t\t} else {\n  \t\t\t// Already first\n  \t\t\treturn;\n  \t\t}\n  \t\tif (next) {\n  \t\t\tnext.prev = prev;\n  \t\t} else if (prev) {\n  \t\t\t// Update last entry unless this is the\n  \t\t\t// single entry\n  \t\t\tthis._drawLast = prev;\n  \t\t}\n\n  \t\torder.prev = null;\n\n  \t\torder.next = this._drawFirst;\n  \t\tthis._drawFirst.prev = order;\n  \t\tthis._drawFirst = order;\n\n  \t\tthis._requestRedraw(layer);\n  \t}\n  });\n\n  // @factory L.canvas(options?: Renderer options)\n  // Creates a Canvas renderer with the given options.\n  function canvas(options) {\n  \treturn Browser.canvas ? new Canvas(options) : null;\n  }\n\n  /*\n   * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n   */\n\n\n  var vmlCreate = (function () {\n  \ttry {\n  \t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n  \t\treturn function (name) {\n  \t\t\treturn document.createElement('<lvml:' + name + ' class=\"lvml\">');\n  \t\t};\n  \t} catch (e) {\n  \t\t// Do not return fn from catch block so `e` can be garbage collected\n  \t\t// See https://github.com/Leaflet/Leaflet/pull/7279\n  \t}\n  \treturn function (name) {\n  \t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n  \t};\n  })();\n\n\n  /*\n   * @class SVG\n   *\n   *\n   * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n   * with old versions of Internet Explorer.\n   */\n\n  // mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\n  var vmlMixin = {\n\n  \t_initContainer: function () {\n  \t\tthis._container = create$1('div', 'leaflet-vml-container');\n  \t},\n\n  \t_update: function () {\n  \t\tif (this._map._animatingZoom) { return; }\n  \t\tRenderer.prototype._update.call(this);\n  \t\tthis.fire('update');\n  \t},\n\n  \t_initPath: function (layer) {\n  \t\tvar container = layer._container = vmlCreate('shape');\n\n  \t\taddClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n  \t\tcontainer.coordsize = '1 1';\n\n  \t\tlayer._path = vmlCreate('path');\n  \t\tcontainer.appendChild(layer._path);\n\n  \t\tthis._updateStyle(layer);\n  \t\tthis._layers[stamp(layer)] = layer;\n  \t},\n\n  \t_addPath: function (layer) {\n  \t\tvar container = layer._container;\n  \t\tthis._container.appendChild(container);\n\n  \t\tif (layer.options.interactive) {\n  \t\t\tlayer.addInteractiveTarget(container);\n  \t\t}\n  \t},\n\n  \t_removePath: function (layer) {\n  \t\tvar container = layer._container;\n  \t\tremove(container);\n  \t\tlayer.removeInteractiveTarget(container);\n  \t\tdelete this._layers[stamp(layer)];\n  \t},\n\n  \t_updateStyle: function (layer) {\n  \t\tvar stroke = layer._stroke,\n  \t\t    fill = layer._fill,\n  \t\t    options = layer.options,\n  \t\t    container = layer._container;\n\n  \t\tcontainer.stroked = !!options.stroke;\n  \t\tcontainer.filled = !!options.fill;\n\n  \t\tif (options.stroke) {\n  \t\t\tif (!stroke) {\n  \t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n  \t\t\t}\n  \t\t\tcontainer.appendChild(stroke);\n  \t\t\tstroke.weight = options.weight + 'px';\n  \t\t\tstroke.color = options.color;\n  \t\t\tstroke.opacity = options.opacity;\n\n  \t\t\tif (options.dashArray) {\n  \t\t\t\tstroke.dashStyle = isArray(options.dashArray) ?\n  \t\t\t\t    options.dashArray.join(' ') :\n  \t\t\t\t    options.dashArray.replace(/( *, *)/g, ' ');\n  \t\t\t} else {\n  \t\t\t\tstroke.dashStyle = '';\n  \t\t\t}\n  \t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n  \t\t\tstroke.joinstyle = options.lineJoin;\n\n  \t\t} else if (stroke) {\n  \t\t\tcontainer.removeChild(stroke);\n  \t\t\tlayer._stroke = null;\n  \t\t}\n\n  \t\tif (options.fill) {\n  \t\t\tif (!fill) {\n  \t\t\t\tfill = layer._fill = vmlCreate('fill');\n  \t\t\t}\n  \t\t\tcontainer.appendChild(fill);\n  \t\t\tfill.color = options.fillColor || options.color;\n  \t\t\tfill.opacity = options.fillOpacity;\n\n  \t\t} else if (fill) {\n  \t\t\tcontainer.removeChild(fill);\n  \t\t\tlayer._fill = null;\n  \t\t}\n  \t},\n\n  \t_updateCircle: function (layer) {\n  \t\tvar p = layer._point.round(),\n  \t\t    r = Math.round(layer._radius),\n  \t\t    r2 = Math.round(layer._radiusY || r);\n\n  \t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n  \t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n  \t},\n\n  \t_setPath: function (layer, path) {\n  \t\tlayer._path.v = path;\n  \t},\n\n  \t_bringToFront: function (layer) {\n  \t\ttoFront(layer._container);\n  \t},\n\n  \t_bringToBack: function (layer) {\n  \t\ttoBack(layer._container);\n  \t}\n  };\n\n  var create = Browser.vml ? vmlCreate : svgCreate;\n\n  /*\n   * @class SVG\n   * @inherits Renderer\n   * @aka L.SVG\n   *\n   * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n   * Inherits `Renderer`.\n   *\n   * Due to [technical limitations](https://caniuse.com/svg), SVG is not\n   * available in all web browsers, notably Android 2.x and 3.x.\n   *\n   * Although SVG is not available on IE7 and IE8, these browsers support\n   * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n   * (a now deprecated technology), and the SVG renderer will fall back to VML in\n   * this case.\n   *\n   * @example\n   *\n   * Use SVG by default for all paths in the map:\n   *\n   * ```js\n   * var map = L.map('map', {\n   * \trenderer: L.svg()\n   * });\n   * ```\n   *\n   * Use a SVG renderer with extra padding for specific vector geometries:\n   *\n   * ```js\n   * var map = L.map('map');\n   * var myRenderer = L.svg({ padding: 0.5 });\n   * var line = L.polyline( coordinates, { renderer: myRenderer } );\n   * var circle = L.circle( center, { renderer: myRenderer } );\n   * ```\n   */\n\n  var SVG = Renderer.extend({\n\n  \t_initContainer: function () {\n  \t\tthis._container = create('svg');\n\n  \t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n  \t\tthis._container.setAttribute('pointer-events', 'none');\n\n  \t\tthis._rootGroup = create('g');\n  \t\tthis._container.appendChild(this._rootGroup);\n  \t},\n\n  \t_destroyContainer: function () {\n  \t\tremove(this._container);\n  \t\toff(this._container);\n  \t\tdelete this._container;\n  \t\tdelete this._rootGroup;\n  \t\tdelete this._svgSize;\n  \t},\n\n  \t_update: function () {\n  \t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n  \t\tRenderer.prototype._update.call(this);\n\n  \t\tvar b = this._bounds,\n  \t\t    size = b.getSize(),\n  \t\t    container = this._container;\n\n  \t\t// set size of svg-container if changed\n  \t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n  \t\t\tthis._svgSize = size;\n  \t\t\tcontainer.setAttribute('width', size.x);\n  \t\t\tcontainer.setAttribute('height', size.y);\n  \t\t}\n\n  \t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n  \t\tsetPosition(container, b.min);\n  \t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n  \t\tthis.fire('update');\n  \t},\n\n  \t// methods below are called by vector layers implementations\n\n  \t_initPath: function (layer) {\n  \t\tvar path = layer._path = create('path');\n\n  \t\t// @namespace Path\n  \t\t// @option className: String = null\n  \t\t// Custom class name set on an element. Only for SVG renderer.\n  \t\tif (layer.options.className) {\n  \t\t\taddClass(path, layer.options.className);\n  \t\t}\n\n  \t\tif (layer.options.interactive) {\n  \t\t\taddClass(path, 'leaflet-interactive');\n  \t\t}\n\n  \t\tthis._updateStyle(layer);\n  \t\tthis._layers[stamp(layer)] = layer;\n  \t},\n\n  \t_addPath: function (layer) {\n  \t\tif (!this._rootGroup) { this._initContainer(); }\n  \t\tthis._rootGroup.appendChild(layer._path);\n  \t\tlayer.addInteractiveTarget(layer._path);\n  \t},\n\n  \t_removePath: function (layer) {\n  \t\tremove(layer._path);\n  \t\tlayer.removeInteractiveTarget(layer._path);\n  \t\tdelete this._layers[stamp(layer)];\n  \t},\n\n  \t_updatePath: function (layer) {\n  \t\tlayer._project();\n  \t\tlayer._update();\n  \t},\n\n  \t_updateStyle: function (layer) {\n  \t\tvar path = layer._path,\n  \t\t    options = layer.options;\n\n  \t\tif (!path) { return; }\n\n  \t\tif (options.stroke) {\n  \t\t\tpath.setAttribute('stroke', options.color);\n  \t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n  \t\t\tpath.setAttribute('stroke-width', options.weight);\n  \t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n  \t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n  \t\t\tif (options.dashArray) {\n  \t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n  \t\t\t} else {\n  \t\t\t\tpath.removeAttribute('stroke-dasharray');\n  \t\t\t}\n\n  \t\t\tif (options.dashOffset) {\n  \t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n  \t\t\t} else {\n  \t\t\t\tpath.removeAttribute('stroke-dashoffset');\n  \t\t\t}\n  \t\t} else {\n  \t\t\tpath.setAttribute('stroke', 'none');\n  \t\t}\n\n  \t\tif (options.fill) {\n  \t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n  \t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n  \t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n  \t\t} else {\n  \t\t\tpath.setAttribute('fill', 'none');\n  \t\t}\n  \t},\n\n  \t_updatePoly: function (layer, closed) {\n  \t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n  \t},\n\n  \t_updateCircle: function (layer) {\n  \t\tvar p = layer._point,\n  \t\t    r = Math.max(Math.round(layer._radius), 1),\n  \t\t    r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n  \t\t    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n  \t\t// drawing a circle with two half-arcs\n  \t\tvar d = layer._empty() ? 'M0 0' :\n  \t\t\t'M' + (p.x - r) + ',' + p.y +\n  \t\t\tarc + (r * 2) + ',0 ' +\n  \t\t\tarc + (-r * 2) + ',0 ';\n\n  \t\tthis._setPath(layer, d);\n  \t},\n\n  \t_setPath: function (layer, path) {\n  \t\tlayer._path.setAttribute('d', path);\n  \t},\n\n  \t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n  \t_bringToFront: function (layer) {\n  \t\ttoFront(layer._path);\n  \t},\n\n  \t_bringToBack: function (layer) {\n  \t\ttoBack(layer._path);\n  \t}\n  });\n\n  if (Browser.vml) {\n  \tSVG.include(vmlMixin);\n  }\n\n  // @namespace SVG\n  // @factory L.svg(options?: Renderer options)\n  // Creates a SVG renderer with the given options.\n  function svg(options) {\n  \treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n  }\n\n  Map.include({\n  \t// @namespace Map; @method getRenderer(layer: Path): Renderer\n  \t// Returns the instance of `Renderer` that should be used to render the given\n  \t// `Path`. It will ensure that the `renderer` options of the map and paths\n  \t// are respected, and that the renderers do exist on the map.\n  \tgetRenderer: function (layer) {\n  \t\t// @namespace Path; @option renderer: Renderer\n  \t\t// Use this specific instance of `Renderer` for this path. Takes\n  \t\t// precedence over the map's [default renderer](#map-renderer).\n  \t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n  \t\tif (!renderer) {\n  \t\t\trenderer = this._renderer = this._createRenderer();\n  \t\t}\n\n  \t\tif (!this.hasLayer(renderer)) {\n  \t\t\tthis.addLayer(renderer);\n  \t\t}\n  \t\treturn renderer;\n  \t},\n\n  \t_getPaneRenderer: function (name) {\n  \t\tif (name === 'overlayPane' || name === undefined) {\n  \t\t\treturn false;\n  \t\t}\n\n  \t\tvar renderer = this._paneRenderers[name];\n  \t\tif (renderer === undefined) {\n  \t\t\trenderer = this._createRenderer({pane: name});\n  \t\t\tthis._paneRenderers[name] = renderer;\n  \t\t}\n  \t\treturn renderer;\n  \t},\n\n  \t_createRenderer: function (options) {\n  \t\t// @namespace Map; @option preferCanvas: Boolean = false\n  \t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n  \t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n  \t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n  \t}\n  });\n\n  /*\n   * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n   */\n\n  /*\n   * @class Rectangle\n   * @aka L.Rectangle\n   * @inherits Polygon\n   *\n   * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n   *\n   * @example\n   *\n   * ```js\n   * // define rectangle geographical bounds\n   * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n   *\n   * // create an orange rectangle\n   * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n   *\n   * // zoom the map to the rectangle bounds\n   * map.fitBounds(bounds);\n   * ```\n   *\n   */\n\n\n  var Rectangle = Polygon.extend({\n  \tinitialize: function (latLngBounds, options) {\n  \t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n  \t},\n\n  \t// @method setBounds(latLngBounds: LatLngBounds): this\n  \t// Redraws the rectangle with the passed bounds.\n  \tsetBounds: function (latLngBounds) {\n  \t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n  \t},\n\n  \t_boundsToLatLngs: function (latLngBounds) {\n  \t\tlatLngBounds = toLatLngBounds(latLngBounds);\n  \t\treturn [\n  \t\t\tlatLngBounds.getSouthWest(),\n  \t\t\tlatLngBounds.getNorthWest(),\n  \t\t\tlatLngBounds.getNorthEast(),\n  \t\t\tlatLngBounds.getSouthEast()\n  \t\t];\n  \t}\n  });\n\n\n  // @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\n  function rectangle(latLngBounds, options) {\n  \treturn new Rectangle(latLngBounds, options);\n  }\n\n  SVG.create = create;\n  SVG.pointsToPath = pointsToPath;\n\n  GeoJSON.geometryToLayer = geometryToLayer;\n  GeoJSON.coordsToLatLng = coordsToLatLng;\n  GeoJSON.coordsToLatLngs = coordsToLatLngs;\n  GeoJSON.latLngToCoords = latLngToCoords;\n  GeoJSON.latLngsToCoords = latLngsToCoords;\n  GeoJSON.getFeature = getFeature;\n  GeoJSON.asFeature = asFeature;\n\n  /*\n   * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n   * (zoom to a selected bounding box), enabled by default.\n   */\n\n  // @namespace Map\n  // @section Interaction Options\n  Map.mergeOptions({\n  \t// @option boxZoom: Boolean = true\n  \t// Whether the map can be zoomed to a rectangular area specified by\n  \t// dragging the mouse while pressing the shift key.\n  \tboxZoom: true\n  });\n\n  var BoxZoom = Handler.extend({\n  \tinitialize: function (map) {\n  \t\tthis._map = map;\n  \t\tthis._container = map._container;\n  \t\tthis._pane = map._panes.overlayPane;\n  \t\tthis._resetStateTimeout = 0;\n  \t\tmap.on('unload', this._destroy, this);\n  \t},\n\n  \taddHooks: function () {\n  \t\ton(this._container, 'mousedown', this._onMouseDown, this);\n  \t},\n\n  \tremoveHooks: function () {\n  \t\toff(this._container, 'mousedown', this._onMouseDown, this);\n  \t},\n\n  \tmoved: function () {\n  \t\treturn this._moved;\n  \t},\n\n  \t_destroy: function () {\n  \t\tremove(this._pane);\n  \t\tdelete this._pane;\n  \t},\n\n  \t_resetState: function () {\n  \t\tthis._resetStateTimeout = 0;\n  \t\tthis._moved = false;\n  \t},\n\n  \t_clearDeferredResetState: function () {\n  \t\tif (this._resetStateTimeout !== 0) {\n  \t\t\tclearTimeout(this._resetStateTimeout);\n  \t\t\tthis._resetStateTimeout = 0;\n  \t\t}\n  \t},\n\n  \t_onMouseDown: function (e) {\n  \t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n  \t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n  \t\t// will interrupt the interaction and orphan a box element in the container.\n  \t\tthis._clearDeferredResetState();\n  \t\tthis._resetState();\n\n  \t\tdisableTextSelection();\n  \t\tdisableImageDrag();\n\n  \t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n  \t\ton(document, {\n  \t\t\tcontextmenu: stop,\n  \t\t\tmousemove: this._onMouseMove,\n  \t\t\tmouseup: this._onMouseUp,\n  \t\t\tkeydown: this._onKeyDown\n  \t\t}, this);\n  \t},\n\n  \t_onMouseMove: function (e) {\n  \t\tif (!this._moved) {\n  \t\t\tthis._moved = true;\n\n  \t\t\tthis._box = create$1('div', 'leaflet-zoom-box', this._container);\n  \t\t\taddClass(this._container, 'leaflet-crosshair');\n\n  \t\t\tthis._map.fire('boxzoomstart');\n  \t\t}\n\n  \t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n  \t\tvar bounds = new Bounds(this._point, this._startPoint),\n  \t\t    size = bounds.getSize();\n\n  \t\tsetPosition(this._box, bounds.min);\n\n  \t\tthis._box.style.width  = size.x + 'px';\n  \t\tthis._box.style.height = size.y + 'px';\n  \t},\n\n  \t_finish: function () {\n  \t\tif (this._moved) {\n  \t\t\tremove(this._box);\n  \t\t\tremoveClass(this._container, 'leaflet-crosshair');\n  \t\t}\n\n  \t\tenableTextSelection();\n  \t\tenableImageDrag();\n\n  \t\toff(document, {\n  \t\t\tcontextmenu: stop,\n  \t\t\tmousemove: this._onMouseMove,\n  \t\t\tmouseup: this._onMouseUp,\n  \t\t\tkeydown: this._onKeyDown\n  \t\t}, this);\n  \t},\n\n  \t_onMouseUp: function (e) {\n  \t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n  \t\tthis._finish();\n\n  \t\tif (!this._moved) { return; }\n  \t\t// Postpone to next JS tick so internal click event handling\n  \t\t// still see it as \"moved\".\n  \t\tthis._clearDeferredResetState();\n  \t\tthis._resetStateTimeout = setTimeout(bind(this._resetState, this), 0);\n\n  \t\tvar bounds = new LatLngBounds(\n  \t\t        this._map.containerPointToLatLng(this._startPoint),\n  \t\t        this._map.containerPointToLatLng(this._point));\n\n  \t\tthis._map\n  \t\t\t.fitBounds(bounds)\n  \t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n  \t},\n\n  \t_onKeyDown: function (e) {\n  \t\tif (e.keyCode === 27) {\n  \t\t\tthis._finish();\n  \t\t\tthis._clearDeferredResetState();\n  \t\t\tthis._resetState();\n  \t\t}\n  \t}\n  });\n\n  // @section Handlers\n  // @property boxZoom: Handler\n  // Box (shift-drag with mouse) zoom handler.\n  Map.addInitHook('addHandler', 'boxZoom', BoxZoom);\n\n  /*\n   * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n   */\n\n  // @namespace Map\n  // @section Interaction Options\n\n  Map.mergeOptions({\n  \t// @option doubleClickZoom: Boolean|String = true\n  \t// Whether the map can be zoomed in by double clicking on it and\n  \t// zoomed out by double clicking while holding shift. If passed\n  \t// `'center'`, double-click zoom will zoom to the center of the\n  \t//  view regardless of where the mouse was.\n  \tdoubleClickZoom: true\n  });\n\n  var DoubleClickZoom = Handler.extend({\n  \taddHooks: function () {\n  \t\tthis._map.on('dblclick', this._onDoubleClick, this);\n  \t},\n\n  \tremoveHooks: function () {\n  \t\tthis._map.off('dblclick', this._onDoubleClick, this);\n  \t},\n\n  \t_onDoubleClick: function (e) {\n  \t\tvar map = this._map,\n  \t\t    oldZoom = map.getZoom(),\n  \t\t    delta = map.options.zoomDelta,\n  \t\t    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n  \t\tif (map.options.doubleClickZoom === 'center') {\n  \t\t\tmap.setZoom(zoom);\n  \t\t} else {\n  \t\t\tmap.setZoomAround(e.containerPoint, zoom);\n  \t\t}\n  \t}\n  });\n\n  // @section Handlers\n  //\n  // Map properties include interaction handlers that allow you to control\n  // interaction behavior in runtime, enabling or disabling certain features such\n  // as dragging or touch zoom (see `Handler` methods). For example:\n  //\n  // ```js\n  // map.doubleClickZoom.disable();\n  // ```\n  //\n  // @property doubleClickZoom: Handler\n  // Double click zoom handler.\n  Map.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n\n  /*\n   * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n   */\n\n  // @namespace Map\n  // @section Interaction Options\n  Map.mergeOptions({\n  \t// @option dragging: Boolean = true\n  \t// Whether the map is draggable with mouse/touch or not.\n  \tdragging: true,\n\n  \t// @section Panning Inertia Options\n  \t// @option inertia: Boolean = *\n  \t// If enabled, panning of the map will have an inertia effect where\n  \t// the map builds momentum while dragging and continues moving in\n  \t// the same direction for some time. Feels especially nice on touch\n  \t// devices. Enabled by default.\n  \tinertia: true,\n\n  \t// @option inertiaDeceleration: Number = 3000\n  \t// The rate with which the inertial movement slows down, in pixels/second².\n  \tinertiaDeceleration: 3400, // px/s^2\n\n  \t// @option inertiaMaxSpeed: Number = Infinity\n  \t// Max speed of the inertial movement, in pixels/second.\n  \tinertiaMaxSpeed: Infinity, // px/s\n\n  \t// @option easeLinearity: Number = 0.2\n  \teaseLinearity: 0.2,\n\n  \t// TODO refactor, move to CRS\n  \t// @option worldCopyJump: Boolean = false\n  \t// With this option enabled, the map tracks when you pan to another \"copy\"\n  \t// of the world and seamlessly jumps to the original one so that all overlays\n  \t// like markers and vector layers are still visible.\n  \tworldCopyJump: false,\n\n  \t// @option maxBoundsViscosity: Number = 0.0\n  \t// If `maxBounds` is set, this option will control how solid the bounds\n  \t// are when dragging the map around. The default value of `0.0` allows the\n  \t// user to drag outside the bounds at normal speed, higher values will\n  \t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n  \t// solid, preventing the user from dragging outside the bounds.\n  \tmaxBoundsViscosity: 0.0\n  });\n\n  var Drag = Handler.extend({\n  \taddHooks: function () {\n  \t\tif (!this._draggable) {\n  \t\t\tvar map = this._map;\n\n  \t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n  \t\t\tthis._draggable.on({\n  \t\t\t\tdragstart: this._onDragStart,\n  \t\t\t\tdrag: this._onDrag,\n  \t\t\t\tdragend: this._onDragEnd\n  \t\t\t}, this);\n\n  \t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n  \t\t\tif (map.options.worldCopyJump) {\n  \t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n  \t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n  \t\t\t\tmap.whenReady(this._onZoomEnd, this);\n  \t\t\t}\n  \t\t}\n  \t\taddClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n  \t\tthis._draggable.enable();\n  \t\tthis._positions = [];\n  \t\tthis._times = [];\n  \t},\n\n  \tremoveHooks: function () {\n  \t\tremoveClass(this._map._container, 'leaflet-grab');\n  \t\tremoveClass(this._map._container, 'leaflet-touch-drag');\n  \t\tthis._draggable.disable();\n  \t},\n\n  \tmoved: function () {\n  \t\treturn this._draggable && this._draggable._moved;\n  \t},\n\n  \tmoving: function () {\n  \t\treturn this._draggable && this._draggable._moving;\n  \t},\n\n  \t_onDragStart: function () {\n  \t\tvar map = this._map;\n\n  \t\tmap._stop();\n  \t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n  \t\t\tvar bounds = toLatLngBounds(this._map.options.maxBounds);\n\n  \t\t\tthis._offsetLimit = toBounds(\n  \t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n  \t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n  \t\t\t\t\t.add(this._map.getSize()));\n\n  \t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n  \t\t} else {\n  \t\t\tthis._offsetLimit = null;\n  \t\t}\n\n  \t\tmap\n  \t\t    .fire('movestart')\n  \t\t    .fire('dragstart');\n\n  \t\tif (map.options.inertia) {\n  \t\t\tthis._positions = [];\n  \t\t\tthis._times = [];\n  \t\t}\n  \t},\n\n  \t_onDrag: function (e) {\n  \t\tif (this._map.options.inertia) {\n  \t\t\tvar time = this._lastTime = +new Date(),\n  \t\t\t    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n  \t\t\tthis._positions.push(pos);\n  \t\t\tthis._times.push(time);\n\n  \t\t\tthis._prunePositions(time);\n  \t\t}\n\n  \t\tthis._map\n  \t\t    .fire('move', e)\n  \t\t    .fire('drag', e);\n  \t},\n\n  \t_prunePositions: function (time) {\n  \t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n  \t\t\tthis._positions.shift();\n  \t\t\tthis._times.shift();\n  \t\t}\n  \t},\n\n  \t_onZoomEnd: function () {\n  \t\tvar pxCenter = this._map.getSize().divideBy(2),\n  \t\t    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n  \t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n  \t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n  \t},\n\n  \t_viscousLimit: function (value, threshold) {\n  \t\treturn value - (value - threshold) * this._viscosity;\n  \t},\n\n  \t_onPreDragLimit: function () {\n  \t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n  \t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n  \t\tvar limit = this._offsetLimit;\n  \t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n  \t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n  \t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n  \t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n  \t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n  \t},\n\n  \t_onPreDragWrap: function () {\n  \t\t// TODO refactor to be able to adjust map pane position after zoom\n  \t\tvar worldWidth = this._worldWidth,\n  \t\t    halfWidth = Math.round(worldWidth / 2),\n  \t\t    dx = this._initialWorldOffset,\n  \t\t    x = this._draggable._newPos.x,\n  \t\t    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n  \t\t    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n  \t\t    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n  \t\tthis._draggable._absPos = this._draggable._newPos.clone();\n  \t\tthis._draggable._newPos.x = newX;\n  \t},\n\n  \t_onDragEnd: function (e) {\n  \t\tvar map = this._map,\n  \t\t    options = map.options,\n\n  \t\t    noInertia = !options.inertia || e.noInertia || this._times.length < 2;\n\n  \t\tmap.fire('dragend', e);\n\n  \t\tif (noInertia) {\n  \t\t\tmap.fire('moveend');\n\n  \t\t} else {\n  \t\t\tthis._prunePositions(+new Date());\n\n  \t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n  \t\t\t    duration = (this._lastTime - this._times[0]) / 1000,\n  \t\t\t    ease = options.easeLinearity,\n\n  \t\t\t    speedVector = direction.multiplyBy(ease / duration),\n  \t\t\t    speed = speedVector.distanceTo([0, 0]),\n\n  \t\t\t    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n  \t\t\t    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n  \t\t\t    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n  \t\t\t    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n  \t\t\tif (!offset.x && !offset.y) {\n  \t\t\t\tmap.fire('moveend');\n\n  \t\t\t} else {\n  \t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n  \t\t\t\trequestAnimFrame(function () {\n  \t\t\t\t\tmap.panBy(offset, {\n  \t\t\t\t\t\tduration: decelerationDuration,\n  \t\t\t\t\t\teaseLinearity: ease,\n  \t\t\t\t\t\tnoMoveStart: true,\n  \t\t\t\t\t\tanimate: true\n  \t\t\t\t\t});\n  \t\t\t\t});\n  \t\t\t}\n  \t\t}\n  \t}\n  });\n\n  // @section Handlers\n  // @property dragging: Handler\n  // Map dragging handler (by both mouse and touch).\n  Map.addInitHook('addHandler', 'dragging', Drag);\n\n  /*\n   * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n   */\n\n  // @namespace Map\n  // @section Keyboard Navigation Options\n  Map.mergeOptions({\n  \t// @option keyboard: Boolean = true\n  \t// Makes the map focusable and allows users to navigate the map with keyboard\n  \t// arrows and `+`/`-` keys.\n  \tkeyboard: true,\n\n  \t// @option keyboardPanDelta: Number = 80\n  \t// Amount of pixels to pan when pressing an arrow key.\n  \tkeyboardPanDelta: 80\n  });\n\n  var Keyboard = Handler.extend({\n\n  \tkeyCodes: {\n  \t\tleft:    [37],\n  \t\tright:   [39],\n  \t\tdown:    [40],\n  \t\tup:      [38],\n  \t\tzoomIn:  [187, 107, 61, 171],\n  \t\tzoomOut: [189, 109, 54, 173]\n  \t},\n\n  \tinitialize: function (map) {\n  \t\tthis._map = map;\n\n  \t\tthis._setPanDelta(map.options.keyboardPanDelta);\n  \t\tthis._setZoomDelta(map.options.zoomDelta);\n  \t},\n\n  \taddHooks: function () {\n  \t\tvar container = this._map._container;\n\n  \t\t// make the container focusable by tabbing\n  \t\tif (container.tabIndex <= 0) {\n  \t\t\tcontainer.tabIndex = '0';\n  \t\t}\n\n  \t\ton(container, {\n  \t\t\tfocus: this._onFocus,\n  \t\t\tblur: this._onBlur,\n  \t\t\tmousedown: this._onMouseDown\n  \t\t}, this);\n\n  \t\tthis._map.on({\n  \t\t\tfocus: this._addHooks,\n  \t\t\tblur: this._removeHooks\n  \t\t}, this);\n  \t},\n\n  \tremoveHooks: function () {\n  \t\tthis._removeHooks();\n\n  \t\toff(this._map._container, {\n  \t\t\tfocus: this._onFocus,\n  \t\t\tblur: this._onBlur,\n  \t\t\tmousedown: this._onMouseDown\n  \t\t}, this);\n\n  \t\tthis._map.off({\n  \t\t\tfocus: this._addHooks,\n  \t\t\tblur: this._removeHooks\n  \t\t}, this);\n  \t},\n\n  \t_onMouseDown: function () {\n  \t\tif (this._focused) { return; }\n\n  \t\tvar body = document.body,\n  \t\t    docEl = document.documentElement,\n  \t\t    top = body.scrollTop || docEl.scrollTop,\n  \t\t    left = body.scrollLeft || docEl.scrollLeft;\n\n  \t\tthis._map._container.focus();\n\n  \t\twindow.scrollTo(left, top);\n  \t},\n\n  \t_onFocus: function () {\n  \t\tthis._focused = true;\n  \t\tthis._map.fire('focus');\n  \t},\n\n  \t_onBlur: function () {\n  \t\tthis._focused = false;\n  \t\tthis._map.fire('blur');\n  \t},\n\n  \t_setPanDelta: function (panDelta) {\n  \t\tvar keys = this._panKeys = {},\n  \t\t    codes = this.keyCodes,\n  \t\t    i, len;\n\n  \t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n  \t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n  \t\t}\n  \t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n  \t\t\tkeys[codes.right[i]] = [panDelta, 0];\n  \t\t}\n  \t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n  \t\t\tkeys[codes.down[i]] = [0, panDelta];\n  \t\t}\n  \t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n  \t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n  \t\t}\n  \t},\n\n  \t_setZoomDelta: function (zoomDelta) {\n  \t\tvar keys = this._zoomKeys = {},\n  \t\t    codes = this.keyCodes,\n  \t\t    i, len;\n\n  \t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n  \t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n  \t\t}\n  \t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n  \t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n  \t\t}\n  \t},\n\n  \t_addHooks: function () {\n  \t\ton(document, 'keydown', this._onKeyDown, this);\n  \t},\n\n  \t_removeHooks: function () {\n  \t\toff(document, 'keydown', this._onKeyDown, this);\n  \t},\n\n  \t_onKeyDown: function (e) {\n  \t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n  \t\tvar key = e.keyCode,\n  \t\t    map = this._map,\n  \t\t    offset;\n\n  \t\tif (key in this._panKeys) {\n  \t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n  \t\t\t\toffset = this._panKeys[key];\n  \t\t\t\tif (e.shiftKey) {\n  \t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n  \t\t\t\t}\n\n  \t\t\t\tmap.panBy(offset);\n\n  \t\t\t\tif (map.options.maxBounds) {\n  \t\t\t\t\tmap.panInsideBounds(map.options.maxBounds);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t} else if (key in this._zoomKeys) {\n  \t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n  \t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n  \t\t\tmap.closePopup();\n\n  \t\t} else {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tstop(e);\n  \t}\n  });\n\n  // @section Handlers\n  // @section Handlers\n  // @property keyboard: Handler\n  // Keyboard navigation handler.\n  Map.addInitHook('addHandler', 'keyboard', Keyboard);\n\n  /*\n   * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n   */\n\n  // @namespace Map\n  // @section Interaction Options\n  Map.mergeOptions({\n  \t// @section Mouse wheel options\n  \t// @option scrollWheelZoom: Boolean|String = true\n  \t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n  \t// it will zoom to the center of the view regardless of where the mouse was.\n  \tscrollWheelZoom: true,\n\n  \t// @option wheelDebounceTime: Number = 40\n  \t// Limits the rate at which a wheel can fire (in milliseconds). By default\n  \t// user can't zoom via wheel more often than once per 40 ms.\n  \twheelDebounceTime: 40,\n\n  \t// @option wheelPxPerZoomLevel: Number = 60\n  \t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n  \t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n  \t// faster (and vice versa).\n  \twheelPxPerZoomLevel: 60\n  });\n\n  var ScrollWheelZoom = Handler.extend({\n  \taddHooks: function () {\n  \t\ton(this._map._container, 'wheel', this._onWheelScroll, this);\n\n  \t\tthis._delta = 0;\n  \t},\n\n  \tremoveHooks: function () {\n  \t\toff(this._map._container, 'wheel', this._onWheelScroll, this);\n  \t},\n\n  \t_onWheelScroll: function (e) {\n  \t\tvar delta = getWheelDelta(e);\n\n  \t\tvar debounce = this._map.options.wheelDebounceTime;\n\n  \t\tthis._delta += delta;\n  \t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n  \t\tif (!this._startTime) {\n  \t\t\tthis._startTime = +new Date();\n  \t\t}\n\n  \t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n  \t\tclearTimeout(this._timer);\n  \t\tthis._timer = setTimeout(bind(this._performZoom, this), left);\n\n  \t\tstop(e);\n  \t},\n\n  \t_performZoom: function () {\n  \t\tvar map = this._map,\n  \t\t    zoom = map.getZoom(),\n  \t\t    snap = this._map.options.zoomSnap || 0;\n\n  \t\tmap._stop(); // stop panning and fly animations if any\n\n  \t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n  \t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n  \t\t    d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n  \t\t    d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n  \t\t    delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n  \t\tthis._delta = 0;\n  \t\tthis._startTime = null;\n\n  \t\tif (!delta) { return; }\n\n  \t\tif (map.options.scrollWheelZoom === 'center') {\n  \t\t\tmap.setZoom(zoom + delta);\n  \t\t} else {\n  \t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n  \t\t}\n  \t}\n  });\n\n  // @section Handlers\n  // @property scrollWheelZoom: Handler\n  // Scroll wheel zoom handler.\n  Map.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n\n  /*\n   * L.Map.TapHold is used to simulate `contextmenu` event on long hold,\n   * which otherwise is not fired by mobile Safari.\n   */\n\n  var tapHoldDelay = 600;\n\n  // @namespace Map\n  // @section Interaction Options\n  Map.mergeOptions({\n  \t// @section Touch interaction options\n  \t// @option tapHold: Boolean\n  \t// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.\n  \ttapHold: Browser.touchNative && Browser.safari && Browser.mobile,\n\n  \t// @option tapTolerance: Number = 15\n  \t// The max number of pixels a user can shift his finger during touch\n  \t// for it to be considered a valid tap.\n  \ttapTolerance: 15\n  });\n\n  var TapHold = Handler.extend({\n  \taddHooks: function () {\n  \t\ton(this._map._container, 'touchstart', this._onDown, this);\n  \t},\n\n  \tremoveHooks: function () {\n  \t\toff(this._map._container, 'touchstart', this._onDown, this);\n  \t},\n\n  \t_onDown: function (e) {\n  \t\tclearTimeout(this._holdTimeout);\n  \t\tif (e.touches.length !== 1) { return; }\n\n  \t\tvar first = e.touches[0];\n  \t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n  \t\tthis._holdTimeout = setTimeout(bind(function () {\n  \t\t\tthis._cancel();\n  \t\t\tif (!this._isTapValid()) { return; }\n\n  \t\t\t// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events\n  \t\t\ton(document, 'touchend', preventDefault);\n  \t\t\ton(document, 'touchend touchcancel', this._cancelClickPrevent);\n  \t\t\tthis._simulateEvent('contextmenu', first);\n  \t\t}, this), tapHoldDelay);\n\n  \t\ton(document, 'touchend touchcancel contextmenu', this._cancel, this);\n  \t\ton(document, 'touchmove', this._onMove, this);\n  \t},\n\n  \t_cancelClickPrevent: function cancelClickPrevent() {\n  \t\toff(document, 'touchend', preventDefault);\n  \t\toff(document, 'touchend touchcancel', cancelClickPrevent);\n  \t},\n\n  \t_cancel: function () {\n  \t\tclearTimeout(this._holdTimeout);\n  \t\toff(document, 'touchend touchcancel contextmenu', this._cancel, this);\n  \t\toff(document, 'touchmove', this._onMove, this);\n  \t},\n\n  \t_onMove: function (e) {\n  \t\tvar first = e.touches[0];\n  \t\tthis._newPos = new Point(first.clientX, first.clientY);\n  \t},\n\n  \t_isTapValid: function () {\n  \t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n  \t},\n\n  \t_simulateEvent: function (type, e) {\n  \t\tvar simulatedEvent = new MouseEvent(type, {\n  \t\t\tbubbles: true,\n  \t\t\tcancelable: true,\n  \t\t\tview: window,\n  \t\t\t// detail: 1,\n  \t\t\tscreenX: e.screenX,\n  \t\t\tscreenY: e.screenY,\n  \t\t\tclientX: e.clientX,\n  \t\t\tclientY: e.clientY,\n  \t\t\t// button: 2,\n  \t\t\t// buttons: 2\n  \t\t});\n\n  \t\tsimulatedEvent._simulated = true;\n\n  \t\te.target.dispatchEvent(simulatedEvent);\n  \t}\n  });\n\n  // @section Handlers\n  // @property tapHold: Handler\n  // Long tap handler to simulate `contextmenu` event (useful in mobile Safari).\n  Map.addInitHook('addHandler', 'tapHold', TapHold);\n\n  /*\n   * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n   */\n\n  // @namespace Map\n  // @section Interaction Options\n  Map.mergeOptions({\n  \t// @section Touch interaction options\n  \t// @option touchZoom: Boolean|String = *\n  \t// Whether the map can be zoomed by touch-dragging with two fingers. If\n  \t// passed `'center'`, it will zoom to the center of the view regardless of\n  \t// where the touch events (fingers) were. Enabled for touch-capable web\n  \t// browsers.\n  \ttouchZoom: Browser.touch,\n\n  \t// @option bounceAtZoomLimits: Boolean = true\n  \t// Set it to false if you don't want the map to zoom beyond min/max zoom\n  \t// and then bounce back when pinch-zooming.\n  \tbounceAtZoomLimits: true\n  });\n\n  var TouchZoom = Handler.extend({\n  \taddHooks: function () {\n  \t\taddClass(this._map._container, 'leaflet-touch-zoom');\n  \t\ton(this._map._container, 'touchstart', this._onTouchStart, this);\n  \t},\n\n  \tremoveHooks: function () {\n  \t\tremoveClass(this._map._container, 'leaflet-touch-zoom');\n  \t\toff(this._map._container, 'touchstart', this._onTouchStart, this);\n  \t},\n\n  \t_onTouchStart: function (e) {\n  \t\tvar map = this._map;\n  \t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n  \t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n  \t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n  \t\tthis._centerPoint = map.getSize()._divideBy(2);\n  \t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n  \t\tif (map.options.touchZoom !== 'center') {\n  \t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n  \t\t}\n\n  \t\tthis._startDist = p1.distanceTo(p2);\n  \t\tthis._startZoom = map.getZoom();\n\n  \t\tthis._moved = false;\n  \t\tthis._zooming = true;\n\n  \t\tmap._stop();\n\n  \t\ton(document, 'touchmove', this._onTouchMove, this);\n  \t\ton(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n  \t\tpreventDefault(e);\n  \t},\n\n  \t_onTouchMove: function (e) {\n  \t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n  \t\tvar map = this._map,\n  \t\t    p1 = map.mouseEventToContainerPoint(e.touches[0]),\n  \t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]),\n  \t\t    scale = p1.distanceTo(p2) / this._startDist;\n\n  \t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n  \t\tif (!map.options.bounceAtZoomLimits && (\n  \t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n  \t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n  \t\t\tthis._zoom = map._limitZoom(this._zoom);\n  \t\t}\n\n  \t\tif (map.options.touchZoom === 'center') {\n  \t\t\tthis._center = this._startLatLng;\n  \t\t\tif (scale === 1) { return; }\n  \t\t} else {\n  \t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n  \t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n  \t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n  \t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n  \t\t}\n\n  \t\tif (!this._moved) {\n  \t\t\tmap._moveStart(true, false);\n  \t\t\tthis._moved = true;\n  \t\t}\n\n  \t\tcancelAnimFrame(this._animRequest);\n\n  \t\tvar moveFn = bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);\n  \t\tthis._animRequest = requestAnimFrame(moveFn, this, true);\n\n  \t\tpreventDefault(e);\n  \t},\n\n  \t_onTouchEnd: function () {\n  \t\tif (!this._moved || !this._zooming) {\n  \t\t\tthis._zooming = false;\n  \t\t\treturn;\n  \t\t}\n\n  \t\tthis._zooming = false;\n  \t\tcancelAnimFrame(this._animRequest);\n\n  \t\toff(document, 'touchmove', this._onTouchMove, this);\n  \t\toff(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n  \t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n  \t\tif (this._map.options.zoomAnimation) {\n  \t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n  \t\t} else {\n  \t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n  \t\t}\n  \t}\n  });\n\n  // @section Handlers\n  // @property touchZoom: Handler\n  // Touch zoom handler.\n  Map.addInitHook('addHandler', 'touchZoom', TouchZoom);\n\n  Map.BoxZoom = BoxZoom;\n  Map.DoubleClickZoom = DoubleClickZoom;\n  Map.Drag = Drag;\n  Map.Keyboard = Keyboard;\n  Map.ScrollWheelZoom = ScrollWheelZoom;\n  Map.TapHold = TapHold;\n  Map.TouchZoom = TouchZoom;\n\n  exports.Bounds = Bounds;\n  exports.Browser = Browser;\n  exports.CRS = CRS;\n  exports.Canvas = Canvas;\n  exports.Circle = Circle;\n  exports.CircleMarker = CircleMarker;\n  exports.Class = Class;\n  exports.Control = Control;\n  exports.DivIcon = DivIcon;\n  exports.DivOverlay = DivOverlay;\n  exports.DomEvent = DomEvent;\n  exports.DomUtil = DomUtil;\n  exports.Draggable = Draggable;\n  exports.Evented = Evented;\n  exports.FeatureGroup = FeatureGroup;\n  exports.GeoJSON = GeoJSON;\n  exports.GridLayer = GridLayer;\n  exports.Handler = Handler;\n  exports.Icon = Icon;\n  exports.ImageOverlay = ImageOverlay;\n  exports.LatLng = LatLng;\n  exports.LatLngBounds = LatLngBounds;\n  exports.Layer = Layer;\n  exports.LayerGroup = LayerGroup;\n  exports.LineUtil = LineUtil;\n  exports.Map = Map;\n  exports.Marker = Marker;\n  exports.Mixin = Mixin;\n  exports.Path = Path;\n  exports.Point = Point;\n  exports.PolyUtil = PolyUtil;\n  exports.Polygon = Polygon;\n  exports.Polyline = Polyline;\n  exports.Popup = Popup;\n  exports.PosAnimation = PosAnimation;\n  exports.Projection = index;\n  exports.Rectangle = Rectangle;\n  exports.Renderer = Renderer;\n  exports.SVG = SVG;\n  exports.SVGOverlay = SVGOverlay;\n  exports.TileLayer = TileLayer;\n  exports.Tooltip = Tooltip;\n  exports.Transformation = Transformation;\n  exports.Util = Util;\n  exports.VideoOverlay = VideoOverlay;\n  exports.bind = bind;\n  exports.bounds = toBounds;\n  exports.canvas = canvas;\n  exports.circle = circle;\n  exports.circleMarker = circleMarker;\n  exports.control = control;\n  exports.divIcon = divIcon;\n  exports.extend = extend;\n  exports.featureGroup = featureGroup;\n  exports.geoJSON = geoJSON;\n  exports.geoJson = geoJson;\n  exports.gridLayer = gridLayer;\n  exports.icon = icon;\n  exports.imageOverlay = imageOverlay;\n  exports.latLng = toLatLng;\n  exports.latLngBounds = toLatLngBounds;\n  exports.layerGroup = layerGroup;\n  exports.map = createMap;\n  exports.marker = marker;\n  exports.point = toPoint;\n  exports.polygon = polygon;\n  exports.polyline = polyline;\n  exports.popup = popup;\n  exports.rectangle = rectangle;\n  exports.setOptions = setOptions;\n  exports.stamp = stamp;\n  exports.svg = svg;\n  exports.svgOverlay = svgOverlay;\n  exports.tileLayer = tileLayer;\n  exports.tooltip = tooltip;\n  exports.transformation = toTransformation;\n  exports.version = version;\n  exports.videoOverlay = videoOverlay;\n\n  var oldL = window.L;\n  exports.noConflict = function() {\n  \twindow.L = oldL;\n  \treturn this;\n  }\n  // Always export us to window global (see #2364)\n  window.L = exports;\n\n}));\n//# sourceMappingURL=leaflet-src.js.map\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arDz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arTn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var ar = moment.defineLocale('ar', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    var az = moment.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays:\n            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n                '_'\n            ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone:\n                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone:\n                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                    '_'\n                ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bm = moment.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return bm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bnBd = moment.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bnBd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bn = moment.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    var bo = moment.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n                '_'\n            ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays:\n            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n                '_'\n            ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex =\n            /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    var br = moment.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ca = moment.defineLocale('ca', {\n        months: {\n            standalone:\n                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                    '_'\n                ),\n            format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n                '_'\n            ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = {\n            format: 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n                '_'\n            ),\n            standalone:\n                'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n                    '_'\n                ),\n        },\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex =\n            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex:\n            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex:\n            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cv = moment.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays:\n            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n                '_'\n            ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                    ? 'тан'\n                    : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays:\n            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deAt;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    var dv = moment.defineLocale('dv', {\n        months: months,\n        monthsShort: months,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl:\n            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n                '_'\n            ),\n        monthsGenitiveEl:\n            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n                '_'\n            ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enAu = moment.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enCa = moment.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enGb;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIe = moment.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enIe;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIl = moment.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    return enIl;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIn = moment.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enNz = moment.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enSg = moment.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enSg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return esDo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esMx = moment.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return esMx;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays:\n            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n                '_'\n            ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: '%d päeva',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return et;\n\n})));\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort:\n            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n                '_'\n            ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n                '_'\n            ),\n        weekdays:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersPast =\n            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n                ' '\n            ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort:\n            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n                '_'\n            ),\n        weekdays:\n            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n                '_'\n            ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fil = moment.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fo = moment.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ga;\n\n})));\n","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort:\n            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomDeva = moment.defineLocale('gom-deva', {\n        months: {\n            standalone:\n                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                    '_'\n                ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    return gomDeva;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months: {\n            standalone:\n                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                    '_'\n                ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort:\n            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort:\n            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse:\n            /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    var hi = moment.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone:\n                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex:\n            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex:\n            /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return hi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone:\n                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone:\n                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays:\n            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n                '_'\n            ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: 'klukkustund',\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var itCh = moment.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var jv = moment.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ka = moment.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone:\n                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                    '_'\n                ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(\n                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n                    function ($0, $1, $2) {\n                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                    }\n                );\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort:\n            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n                '_'\n            ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return km;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    var kn = moment.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort:\n            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return kn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ko = moment.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    var ku = moment.defineLocale('ku', {\n        months: months,\n        monthsShort: months,\n        weekdays:\n            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime,\n            mm: '%d Minutten',\n            h: processRelativeTime,\n            hh: '%d Stonnen',\n            d: processRelativeTime,\n            dd: '%d Deeg',\n            M: processRelativeTime,\n            MM: '%d Méint',\n            y: processRelativeTime,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var lo = moment.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n                '_'\n            ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n            ? forms(key)[1]\n            : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone:\n                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone:\n                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                    '_'\n                ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate,\n            m: translateSingular,\n            mm: translate,\n            h: translateSingular,\n            hh: translate,\n            d: translateSingular,\n            dd: translate,\n            M: translateSingular,\n            MM: translate,\n            y: translateSingular,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays:\n            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                ? wordKey[1]\n                : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort:\n            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n                '_'\n            ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mk = moment.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n                '_'\n            ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort:\n            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return mr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var msMy = moment.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ms = moment.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mt = moment.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays:\n            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n                '_'\n            ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return my;\n\n})));\n","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dager',\n            w: 'en uke',\n            ww: '%d uker',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    var ne = moment.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nlBe;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nn = moment.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ocLnc = moment.defineLocale('oc-lnc', {\n        months: {\n            standalone:\n                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                    '_'\n                ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n                '_'\n            ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort:\n            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural,\n            m: 'un minut',\n            mm: relativeTimeWithPlural,\n            h: 'o oră',\n            hh: relativeTimeWithPlural,\n            d: 'o zi',\n            dd: relativeTimeWithPlural,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural,\n            M: 'o lună',\n            MM: relativeTimeWithPlural,\n            y: 'un an',\n            yy: relativeTimeWithPlural,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    var sd = moment.defineLocale('sd', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var se = moment.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort:\n            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays:\n            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n                '_'\n            ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return se;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays:\n            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n                '_'\n            ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    return si;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months =\n            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n                '_'\n            ),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return n > 1 && n < 5;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months: months,\n        monthsShort: monthsShort,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sq = moment.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sq;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једног минута'],\n            mm: ['минут', 'минута', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            d: ['један дан', 'једног дана'],\n            dd: ['дан', 'дана', 'дана'],\n            M: ['један месец', 'једног месеца'],\n            MM: ['месец', 'месеца', 'месеци'],\n            y: ['једну годину', 'једне године'],\n            yy: ['годину', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'једна година';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'годину') {\n                return number + ' година';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort:\n            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            d: ['jedan dan', 'jednog dana'],\n            dd: ['dan', 'dana', 'dana'],\n            M: ['jedan mesec', 'jednog meseca'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            y: ['jednu godinu', 'jedne godine'],\n            yy: ['godinu', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'jedna godina';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'godinu') {\n                return number + ' godina';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ss = moment.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays:\n            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n                '_'\n            ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ss;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                        ? ':a'\n                        : b === 2\n                        ? ':a'\n                        : b === 3\n                        ? ':e'\n                        : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sw = moment.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays:\n            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n                '_'\n            ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: '[wiki ijayo] dddd [saat] LT',\n            lastDay: '[jana] LT',\n            lastWeek: '[wiki iliyopita] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: 'tokea %s',\n            s: 'hivi punde',\n            ss: 'sekunde %d',\n            m: 'dakika moja',\n            mm: 'dakika %d',\n            h: 'saa limoja',\n            hh: 'masaa %d',\n            d: 'siku moja',\n            dd: 'siku %d',\n            M: 'mwezi mmoja',\n            MM: 'miezi %d',\n            y: 'mwaka mmoja',\n            yy: 'miaka %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    var ta = moment.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort:\n            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n                '_'\n            ),\n        weekdays:\n            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n                '_'\n            ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var te = moment.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort:\n            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n                '_'\n            ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return te;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tet = moment.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tet;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone:\n                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var th = moment.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort:\n            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    var tk = moment.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlPh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'waQ'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'nem'\n                : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'wen'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'ben'\n                : time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort:\n            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate,\n            m: 'wa’ tup',\n            mm: translate,\n            h: 'wa’ rep',\n            hh: translate,\n            d: 'wa’ jaj',\n            dd: translate,\n            M: 'wa’ jar',\n            MM: translate,\n            y: 'wa’ DIS',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n            ? format[key][0]\n            : format[key][1];\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort:\n            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n                '_'\n            ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzm = moment.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n                '_'\n            ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n                '_'\n            ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return ugCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n            ? 'genitive'\n            : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    var ur = moment.defineLocale('ur', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays:\n            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n                '_'\n            ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: 'Bir necha %s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uz = moment.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: 'Бир неча %s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var vi = moment.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort:\n            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort:\n            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n                '_'\n            ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var yo = moment.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return yo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhMo = moment.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhMo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhTw;\n\n})));\n","var map = {\n\t\"./af\": \"./node_modules/moment/locale/af.js\",\n\t\"./af.js\": \"./node_modules/moment/locale/af.js\",\n\t\"./ar\": \"./node_modules/moment/locale/ar.js\",\n\t\"./ar-dz\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-dz.js\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-kw\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-kw.js\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-ly\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ly.js\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ma\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ma.js\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-sa\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-sa.js\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-tn\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar-tn.js\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar.js\": \"./node_modules/moment/locale/ar.js\",\n\t\"./az\": \"./node_modules/moment/locale/az.js\",\n\t\"./az.js\": \"./node_modules/moment/locale/az.js\",\n\t\"./be\": \"./node_modules/moment/locale/be.js\",\n\t\"./be.js\": \"./node_modules/moment/locale/be.js\",\n\t\"./bg\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bg.js\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bm\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bm.js\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bn\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bn-bd\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn-bd.js\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn.js\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bo\": \"./node_modules/moment/locale/bo.js\",\n\t\"./bo.js\": \"./node_modules/moment/locale/bo.js\",\n\t\"./br\": \"./node_modules/moment/locale/br.js\",\n\t\"./br.js\": \"./node_modules/moment/locale/br.js\",\n\t\"./bs\": \"./node_modules/moment/locale/bs.js\",\n\t\"./bs.js\": \"./node_modules/moment/locale/bs.js\",\n\t\"./ca\": \"./node_modules/moment/locale/ca.js\",\n\t\"./ca.js\": \"./node_modules/moment/locale/ca.js\",\n\t\"./cs\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cs.js\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cv\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cv.js\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cy\": \"./node_modules/moment/locale/cy.js\",\n\t\"./cy.js\": \"./node_modules/moment/locale/cy.js\",\n\t\"./da\": \"./node_modules/moment/locale/da.js\",\n\t\"./da.js\": \"./node_modules/moment/locale/da.js\",\n\t\"./de\": \"./node_modules/moment/locale/de.js\",\n\t\"./de-at\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-at.js\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-ch\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de-ch.js\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de.js\": \"./node_modules/moment/locale/de.js\",\n\t\"./dv\": \"./node_modules/moment/locale/dv.js\",\n\t\"./dv.js\": \"./node_modules/moment/locale/dv.js\",\n\t\"./el\": \"./node_modules/moment/locale/el.js\",\n\t\"./el.js\": \"./node_modules/moment/locale/el.js\",\n\t\"./en-au\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-au.js\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-ca\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-ca.js\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-gb\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-ie\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-ie.js\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-il\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-il.js\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-in\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-in.js\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-nz\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-nz.js\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-sg\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./en-sg.js\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./eo\": \"./node_modules/moment/locale/eo.js\",\n\t\"./eo.js\": \"./node_modules/moment/locale/eo.js\",\n\t\"./es\": \"./node_modules/moment/locale/es.js\",\n\t\"./es-do\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-do.js\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-mx\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-mx.js\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-us\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es-us.js\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es.js\": \"./node_modules/moment/locale/es.js\",\n\t\"./et\": \"./node_modules/moment/locale/et.js\",\n\t\"./et.js\": \"./node_modules/moment/locale/et.js\",\n\t\"./eu\": \"./node_modules/moment/locale/eu.js\",\n\t\"./eu.js\": \"./node_modules/moment/locale/eu.js\",\n\t\"./fa\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fa.js\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fi\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fi.js\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fil\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fil.js\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fo\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fo.js\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fr\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fr-ca\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ca.js\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ch\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr-ch.js\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr.js\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fy\": \"./node_modules/moment/locale/fy.js\",\n\t\"./fy.js\": \"./node_modules/moment/locale/fy.js\",\n\t\"./ga\": \"./node_modules/moment/locale/ga.js\",\n\t\"./ga.js\": \"./node_modules/moment/locale/ga.js\",\n\t\"./gd\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gd.js\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gl\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gl.js\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gom-deva\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-deva.js\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-latn\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gom-latn.js\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gu\": \"./node_modules/moment/locale/gu.js\",\n\t\"./gu.js\": \"./node_modules/moment/locale/gu.js\",\n\t\"./he\": \"./node_modules/moment/locale/he.js\",\n\t\"./he.js\": \"./node_modules/moment/locale/he.js\",\n\t\"./hi\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hi.js\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hr\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hr.js\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hu\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hu.js\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hy-am\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./hy-am.js\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./id\": \"./node_modules/moment/locale/id.js\",\n\t\"./id.js\": \"./node_modules/moment/locale/id.js\",\n\t\"./is\": \"./node_modules/moment/locale/is.js\",\n\t\"./is.js\": \"./node_modules/moment/locale/is.js\",\n\t\"./it\": \"./node_modules/moment/locale/it.js\",\n\t\"./it-ch\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it-ch.js\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it.js\": \"./node_modules/moment/locale/it.js\",\n\t\"./ja\": \"./node_modules/moment/locale/ja.js\",\n\t\"./ja.js\": \"./node_modules/moment/locale/ja.js\",\n\t\"./jv\": \"./node_modules/moment/locale/jv.js\",\n\t\"./jv.js\": \"./node_modules/moment/locale/jv.js\",\n\t\"./ka\": \"./node_modules/moment/locale/ka.js\",\n\t\"./ka.js\": \"./node_modules/moment/locale/ka.js\",\n\t\"./kk\": \"./node_modules/moment/locale/kk.js\",\n\t\"./kk.js\": \"./node_modules/moment/locale/kk.js\",\n\t\"./km\": \"./node_modules/moment/locale/km.js\",\n\t\"./km.js\": \"./node_modules/moment/locale/km.js\",\n\t\"./kn\": \"./node_modules/moment/locale/kn.js\",\n\t\"./kn.js\": \"./node_modules/moment/locale/kn.js\",\n\t\"./ko\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ko.js\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ku\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ku.js\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ky\": \"./node_modules/moment/locale/ky.js\",\n\t\"./ky.js\": \"./node_modules/moment/locale/ky.js\",\n\t\"./lb\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lb.js\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lo\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lo.js\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lt\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lt.js\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lv\": \"./node_modules/moment/locale/lv.js\",\n\t\"./lv.js\": \"./node_modules/moment/locale/lv.js\",\n\t\"./me\": \"./node_modules/moment/locale/me.js\",\n\t\"./me.js\": \"./node_modules/moment/locale/me.js\",\n\t\"./mi\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mi.js\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mk\": \"./node_modules/moment/locale/mk.js\",\n\t\"./mk.js\": \"./node_modules/moment/locale/mk.js\",\n\t\"./ml\": \"./node_modules/moment/locale/ml.js\",\n\t\"./ml.js\": \"./node_modules/moment/locale/ml.js\",\n\t\"./mn\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mn.js\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mr\": \"./node_modules/moment/locale/mr.js\",\n\t\"./mr.js\": \"./node_modules/moment/locale/mr.js\",\n\t\"./ms\": \"./node_modules/moment/locale/ms.js\",\n\t\"./ms-my\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms-my.js\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms.js\": \"./node_modules/moment/locale/ms.js\",\n\t\"./mt\": \"./node_modules/moment/locale/mt.js\",\n\t\"./mt.js\": \"./node_modules/moment/locale/mt.js\",\n\t\"./my\": \"./node_modules/moment/locale/my.js\",\n\t\"./my.js\": \"./node_modules/moment/locale/my.js\",\n\t\"./nb\": \"./node_modules/moment/locale/nb.js\",\n\t\"./nb.js\": \"./node_modules/moment/locale/nb.js\",\n\t\"./ne\": \"./node_modules/moment/locale/ne.js\",\n\t\"./ne.js\": \"./node_modules/moment/locale/ne.js\",\n\t\"./nl\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nl-be\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl-be.js\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl.js\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nn\": \"./node_modules/moment/locale/nn.js\",\n\t\"./nn.js\": \"./node_modules/moment/locale/nn.js\",\n\t\"./oc-lnc\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./oc-lnc.js\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./pa-in\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pa-in.js\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pl\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pl.js\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pt\": \"./node_modules/moment/locale/pt.js\",\n\t\"./pt-br\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt-br.js\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt.js\": \"./node_modules/moment/locale/pt.js\",\n\t\"./ro\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ro.js\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ru\": \"./node_modules/moment/locale/ru.js\",\n\t\"./ru.js\": \"./node_modules/moment/locale/ru.js\",\n\t\"./sd\": \"./node_modules/moment/locale/sd.js\",\n\t\"./sd.js\": \"./node_modules/moment/locale/sd.js\",\n\t\"./se\": \"./node_modules/moment/locale/se.js\",\n\t\"./se.js\": \"./node_modules/moment/locale/se.js\",\n\t\"./si\": \"./node_modules/moment/locale/si.js\",\n\t\"./si.js\": \"./node_modules/moment/locale/si.js\",\n\t\"./sk\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sk.js\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sl\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sl.js\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sq\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sq.js\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sr\": \"./node_modules/moment/locale/sr.js\",\n\t\"./sr-cyrl\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr-cyrl.js\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr.js\": \"./node_modules/moment/locale/sr.js\",\n\t\"./ss\": \"./node_modules/moment/locale/ss.js\",\n\t\"./ss.js\": \"./node_modules/moment/locale/ss.js\",\n\t\"./sv\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sv.js\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sw\": \"./node_modules/moment/locale/sw.js\",\n\t\"./sw.js\": \"./node_modules/moment/locale/sw.js\",\n\t\"./ta\": \"./node_modules/moment/locale/ta.js\",\n\t\"./ta.js\": \"./node_modules/moment/locale/ta.js\",\n\t\"./te\": \"./node_modules/moment/locale/te.js\",\n\t\"./te.js\": \"./node_modules/moment/locale/te.js\",\n\t\"./tet\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tet.js\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tg\": \"./node_modules/moment/locale/tg.js\",\n\t\"./tg.js\": \"./node_modules/moment/locale/tg.js\",\n\t\"./th\": \"./node_modules/moment/locale/th.js\",\n\t\"./th.js\": \"./node_modules/moment/locale/th.js\",\n\t\"./tk\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tk.js\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tl-ph\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tl-ph.js\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tlh\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tlh.js\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tr\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tr.js\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tzl\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzl.js\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzm\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./tzm-latn\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm-latn.js\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm.js\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./ug-cn\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./ug-cn.js\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./uk\": \"./node_modules/moment/locale/uk.js\",\n\t\"./uk.js\": \"./node_modules/moment/locale/uk.js\",\n\t\"./ur\": \"./node_modules/moment/locale/ur.js\",\n\t\"./ur.js\": \"./node_modules/moment/locale/ur.js\",\n\t\"./uz\": \"./node_modules/moment/locale/uz.js\",\n\t\"./uz-latn\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz-latn.js\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz.js\": \"./node_modules/moment/locale/uz.js\",\n\t\"./vi\": \"./node_modules/moment/locale/vi.js\",\n\t\"./vi.js\": \"./node_modules/moment/locale/vi.js\",\n\t\"./x-pseudo\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./x-pseudo.js\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./yo\": \"./node_modules/moment/locale/yo.js\",\n\t\"./yo.js\": \"./node_modules/moment/locale/yo.js\",\n\t\"./zh-cn\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-cn.js\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-hk\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-hk.js\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-mo\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-mo.js\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-tw\": \"./node_modules/moment/locale/zh-tw.js\",\n\t\"./zh-tw.js\": \"./node_modules/moment/locale/zh-tw.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\";","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/*!\n * @file ScrollMagic GSAP Animation Plugin.\n *\n * requires: GSAP ~1.14\n * Powered by the Greensock Animation Platform (GSAP): http://www.greensock.com/js\n * Greensock License info at http://www.greensock.com/licensing/\n */\n/**\n * This plugin is meant to be used in conjunction with the Greensock Animation Plattform.\n * It offers an easy API to trigger Tweens or synchronize them to the scrollbar movement.\n *\n * Both the `lite` and the `max` versions of the GSAP library are supported.\n * The most basic requirement is `TweenLite`.\n *\n * To have access to this extension, please include `plugins/animation.gsap.js`.\n * @requires {@link http://greensock.com/gsap|GSAP ~1.14.x}\n * @mixin animation.GSAP\n */\nvar ScrollMagicPluginGsap = function(ScrollMagic, TweenMax, Timeline) {\n    var Tween = TweenMax;\n    var NAMESPACE = \"animation.gsap\";\n\n    // (BUILD) - REMOVE IN MINIFY - START\n    var console = window.console || {},\n        err = Function.prototype.bind.call(\n            console.error || console.log || function() {},\n            console\n        );\n    if (!ScrollMagic) {\n        err(\n            \"(\" +\n                NAMESPACE +\n                \") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs.\"\n        );\n    }\n    if (!Tween) {\n        err(\n            \"(\" +\n                NAMESPACE +\n                \") -> ERROR: TweenLite or TweenMax could not be found. Please make sure GSAP is loaded before ScrollMagic or use an asynchronous loader like requirejs.\"\n        );\n    }\n    // (BUILD) - REMOVE IN MINIFY - END\n\n    /*\n     * ----------------------------------------------------------------\n     * Extensions for Scene\n     * ----------------------------------------------------------------\n     */\n    /**\n     * Every instance of ScrollMagic.Scene now accepts an additional option.  \n     * See {@link ScrollMagic.Scene} for a complete list of the standard options.\n     * @memberof! animation.GSAP#\n     * @method new ScrollMagic.Scene(options)\n     * @example\n     * var scene = new ScrollMagic.Scene({tweenChanges: true});\n     *\n     * @param {object} [options] - Options for the Scene. The options can be updated at any time.\n     * @param {boolean} [options.tweenChanges=false] - Tweens Animation to the progress target instead of setting it.  \n                                                      Does not affect animations where duration is `0`.\n     */\n    /**\n     * **Get** or **Set** the tweenChanges option value.\n     * This only affects scenes with a duration. If `tweenChanges` is `true`, the progress update when scrolling will not be immediate, but instead the animation will smoothly animate to the target state.\n     * For a better understanding, try enabling and disabling this option in the [Scene Manipulation Example](../examples/basic/scene_manipulation.html).\n     * @memberof! animation.GSAP#\n     * @method Scene.tweenChanges\n     *\n     * @example\n     * // get the current tweenChanges option\n     * var tweenChanges = scene.tweenChanges();\n     *\n     * // set new tweenChanges option\n     * scene.tweenChanges(true);\n     *\n     * @fires {@link Scene.change}, when used as setter\n     * @param {boolean} [newTweenChanges] - The new tweenChanges setting of the scene.\n     * @returns {boolean} `get` -  Current tweenChanges option value.\n     * @returns {Scene} `set` -  Parent object for chaining.\n     */\n    // add option (TODO: DOC (private for dev))\n    ScrollMagic.Scene.addOption(\n        \"tweenChanges\", // name\n        false, // default\n        function(val) {\n            // validation callback\n            return !!val;\n        }\n    );\n    // extend scene\n    ScrollMagic.Scene.extend(function() {\n        var Scene = this,\n            _tween;\n\n        // (BUILD) - REMOVE IN MINIFY - START\n        var log = function() {\n            if (Scene._log) {\n                // not available, when main source minified\n                Array.prototype.splice.call(\n                    arguments,\n                    1,\n                    0,\n                    \"(\" + NAMESPACE + \")\",\n                    \"->\"\n                );\n                Scene._log.apply(this, arguments);\n            }\n        };\n        // (BUILD) - REMOVE IN MINIFY - END\n\n        // set listeners\n        Scene.on(\"progress.plugin_gsap\", function() {\n            updateTweenProgress();\n        });\n        Scene.on(\"destroy.plugin_gsap\", function(e) {\n            Scene.removeTween(e.reset);\n        });\n\n        /**\n         * Update the tween progress to current position.\n         * @private\n         */\n        var updateTweenProgress = function() {\n            if (_tween) {\n                var progress = Scene.progress(),\n                    state = Scene.state();\n                if (_tween.repeat && _tween.repeat() === -1) {\n                    // infinite loop, so not in relation to progress\n                    if (state === \"DURING\" && _tween.paused()) {\n                        _tween.play();\n                    } else if (state !== \"DURING\" && !_tween.paused()) {\n                        _tween.pause();\n                    }\n                } else if (progress != _tween.progress()) {\n                    // do we even need to update the progress?\n                    // no infinite loop - so should we just play or go to a specific point in time?\n                    if (Scene.duration() === 0) {\n                        // play the animation\n                        if (progress > 0) {\n                            // play from 0 to 1\n                            _tween.play();\n                        } else {\n                            // play from 1 to 0\n                            _tween.reverse();\n                        }\n                    } else {\n                        // go to a specific point in time\n                        if (Scene.tweenChanges() && _tween.tweenTo) {\n                            // go smooth\n                            _tween.tweenTo(progress * _tween.duration());\n                        } else {\n                            // just hard set it\n                            _tween.progress(progress).pause();\n                        }\n                    }\n                }\n            }\n        };\n\n        /**\n         * Add a tween to the scene.\n         * If you want to add multiple tweens, add them into a GSAP Timeline object and supply it instead (see example below).\n         *\n         * If the scene has a duration, the tween's duration will be projected to the scroll distance of the scene, meaning its progress will be synced to scrollbar movement.\n         * For a scene with a duration of `0`, the tween will be triggered when scrolling forward past the scene's trigger position and reversed, when scrolling back.\n         * To gain better understanding, check out the [Simple Tweening example](../examples/basic/simple_tweening.html).\n         *\n         * Instead of supplying a tween this method can also be used as a shorthand for `TweenMax.to()` (see example below).\n         * @memberof! animation.GSAP#\n         *\n         * @example\n         * // add a single tween directly\n         * scene.setTween(TweenMax.to(\"obj\"), 1, {x: 100});\n         *\n         * // add a single tween via variable\n         * var tween = TweenMax.to(\"obj\"), 1, {x: 100};\n         * scene.setTween(tween);\n         *\n         * // add multiple tweens, wrapped in a timeline.\n         * var timeline = new TimelineMax();\n         * var tween1 = TweenMax.from(\"obj1\", 1, {x: 100});\n         * var tween2 = TweenMax.to(\"obj2\", 1, {y: 100});\n         * timeline\n         *      .add(tween1)\n         *      .add(tween2);\n         * scene.addTween(timeline);\n         *\n         * // short hand to add a TweenMax.to() tween\n         * scene.setTween(\"obj3\", 0.5, {y: 100});\n         *\n         * // short hand to add a TweenMax.to() tween for 1 second\n         * // this is useful, when the scene has a duration and the tween duration isn't important anyway\n         * scene.setTween(\"obj3\", {y: 100});\n         *\n         * @param {(object|string)} TweenObject - A TweenMax, TweenLite, TimelineMax or TimelineLite object that should be animated in the scene. Can also be a Dom Element or Selector, when using direct tween definition (see examples).\n         * @param {(number|object)} duration - A duration for the tween, or tween parameters. If an object containing parameters are supplied, a default duration of 1 will be used.\n         * @param {object} params - The parameters for the tween\n         * @returns {Scene} Parent object for chaining.\n         */\n        Scene.setTween = function(TweenObject, duration, params) {\n            var newTween;\n            if (arguments.length > 1) {\n                if (arguments.length < 3) {\n                    params = duration;\n                    duration = 1;\n                }\n                TweenObject = Tween.to(TweenObject, duration, params);\n            }\n            try {\n                // wrap Tween into a Timeline Object if available to include delay and repeats in the duration and standardize methods.\n                if (Timeline) {\n                    newTween = new Timeline({ smoothChildTiming: true }).add(\n                        TweenObject\n                    );\n                } else {\n                    newTween = TweenObject;\n                }\n                newTween.pause();\n            } catch (e) {\n                log(\n                    1,\n                    \"ERROR calling method 'setTween()': Supplied argument is not a valid TweenObject\"\n                );\n                return Scene;\n            }\n            if (_tween) {\n                // kill old tween?\n                Scene.removeTween();\n            }\n            _tween = newTween;\n\n            // some properties need to be transferred it to the wrapper, otherwise they would get lost.\n            if (TweenObject.repeat && TweenObject.repeat() === -1) {\n                // TweenMax or TimelineMax Object?\n                _tween.repeat(-1);\n                _tween.yoyo(TweenObject.yoyo());\n            }\n            // (BUILD) - REMOVE IN MINIFY - START\n            // Some tween validations and debugging helpers\n\n            if (Scene.tweenChanges() && !_tween.tweenTo) {\n                log(\n                    2,\n                    \"WARNING: tweenChanges will only work if the TimelineMax object is available for ScrollMagic.\"\n                );\n            }\n\n            // check if there are position tweens defined for the trigger and warn about it :)\n            if (\n                _tween &&\n                Scene.controller() &&\n                Scene.triggerElement() &&\n                Scene.loglevel() >= 2\n            ) {\n                // controller is needed to know scroll direction.\n                var triggerTweens = Tween.getTweensOf(Scene.triggerElement()),\n                    vertical = Scene.controller().info(\"vertical\");\n                triggerTweens.forEach(function(value, index) {\n                    var tweenvars = value.vars.css || value.vars,\n                        condition = vertical\n                            ? tweenvars.top !== undefined ||\n                              tweenvars.bottom !== undefined\n                            : tweenvars.left !== undefined ||\n                              tweenvars.right !== undefined;\n                    if (condition) {\n                        log(\n                            2,\n                            \"WARNING: Tweening the position of the trigger element affects the scene timing and should be avoided!\"\n                        );\n                        return false;\n                    }\n                });\n            }\n\n            // warn about tween overwrites, when an element is tweened multiple times\n            if (parseFloat(Tween.version) >= 1.14) {\n                // onOverwrite only present since GSAP v1.14.0\n                var list = _tween.getChildren\n                        ? _tween.getChildren(true, true, false)\n                        : [_tween], // get all nested tween objects\n                    newCallback = function() {\n                        log(\n                            2,\n                            \"WARNING: tween was overwritten by another. To learn how to avoid this issue see here: https://github.com/janpaepke/ScrollMagic/wiki/WARNING:-tween-was-overwritten-by-another\"\n                        );\n                    };\n                for (var i = 0, thisTween, oldCallback; i < list.length; i++) {\n                    /*jshint loopfunc: true */\n                    thisTween = list[i];\n                    if (oldCallback !== newCallback) {\n                        // if tweens is added more than once\n                        oldCallback = thisTween.vars.onOverwrite;\n                        thisTween.vars.onOverwrite = function() {\n                            if (oldCallback) {\n                                oldCallback.apply(this, arguments);\n                            }\n                            newCallback.apply(this, arguments);\n                        };\n                    }\n                }\n            }\n            // (BUILD) - REMOVE IN MINIFY - END\n            log(3, \"added tween\");\n\n            updateTweenProgress();\n            return Scene;\n        };\n\n        /**\n         * Remove the tween from the scene.\n         * This will terminate the control of the Scene over the tween.\n         *\n         * Using the reset option you can decide if the tween should remain in the current state or be rewound to set the target elements back to the state they were in before the tween was added to the scene.\n         * @memberof! animation.GSAP#\n         *\n         * @example\n         * // remove the tween from the scene without resetting it\n         * scene.removeTween();\n         *\n         * // remove the tween from the scene and reset it to initial position\n         * scene.removeTween(true);\n         *\n         * @param {boolean} [reset=false] - If `true` the tween will be reset to its initial values.\n         * @returns {Scene} Parent object for chaining.\n         */\n        Scene.removeTween = function(reset) {\n            if (_tween) {\n                if (reset) {\n                    _tween.progress(0).pause();\n                }\n                _tween.kill();\n                _tween = undefined;\n                log(\n                    3,\n                    \"removed tween (reset: \" + (reset ? \"true\" : \"false\") + \")\"\n                );\n            }\n            return Scene;\n        };\n    });\n};\n\nmodule.exports = { ScrollMagicPluginGsap : ScrollMagicPluginGsap };\n","/*!\r\n * ScrollMagic v2.0.8 (2020-08-14)\r\n * The javascript library for magical scroll interactions.\r\n * (c) 2020 Jan Paepke (@janpaepke)\r\n * Project Website: http://scrollmagic.io\r\n * \r\n * @version 2.0.8\r\n * @license Dual licensed under MIT license and GPL.\r\n * @author Jan Paepke - e-mail@janpaepke.de\r\n *\r\n * @file ScrollMagic main library.\r\n */\r\n/**\r\n * @namespace ScrollMagic\r\n */\r\n(function (root, factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine(factory);\r\n\t} else if (typeof exports === 'object') {\r\n\t\t// CommonJS\r\n\t\tmodule.exports = factory();\r\n\t} else {\r\n\t\t// Browser global\r\n\t\troot.ScrollMagic = factory();\r\n\t}\r\n}(this, function () {\r\n\t\"use strict\";\r\n\r\n\tvar ScrollMagic = function () {\r\n\t\t_util.log(2, '(COMPATIBILITY NOTICE) -> As of ScrollMagic 2.0.0 you need to use \\'new ScrollMagic.Controller()\\' to create a new controller instance. Use \\'new ScrollMagic.Scene()\\' to instance a scene.');\r\n\t};\r\n\r\n\tScrollMagic.version = \"2.0.8\";\r\n\r\n\t// TODO: temporary workaround for chrome's scroll jitter bug\r\n\tif (typeof (window) !== 'undefined') {\r\n\t\twindow.addEventListener(\"mousewheel\", void(0));\r\n\t}\r\n\r\n\t// global const\r\n\tvar PIN_SPACER_ATTRIBUTE = \"data-scrollmagic-pin-spacer\";\r\n\r\n\t/**\r\n\t * The main class that is needed once per scroll container.\r\n\t *\r\n\t * @class\r\n\t *\r\n\t * @example\r\n\t * // basic initialization\r\n\t * var controller = new ScrollMagic.Controller();\r\n\t *\r\n\t * // passing options\r\n\t * var controller = new ScrollMagic.Controller({container: \"#myContainer\", loglevel: 3});\r\n\t *\r\n\t * @param {object} [options] - An object containing one or more options for the controller.\r\n\t * @param {(string|object)} [options.container=window] - A selector, DOM object that references the main container for scrolling.\r\n\t * @param {boolean} [options.vertical=true] - Sets the scroll mode to vertical (`true`) or horizontal (`false`) scrolling.\r\n\t * @param {object} [options.globalSceneOptions={}] - These options will be passed to every Scene that is added to the controller using the addScene method. For more information on Scene options see {@link ScrollMagic.Scene}.\r\n\t * @param {number} [options.loglevel=2] Loglevel for debugging. Note that logging is disabled in the minified version of ScrollMagic.\r\n\t\t\t\t\t\t\t\t\t\t\t ** `0` => silent\r\n\t\t\t\t\t\t\t\t\t\t\t ** `1` => errors\r\n\t\t\t\t\t\t\t\t\t\t\t ** `2` => errors, warnings\r\n\t\t\t\t\t\t\t\t\t\t\t ** `3` => errors, warnings, debuginfo\r\n\t * @param {boolean} [options.refreshInterval=100] - Some changes don't call events by default, like changing the container size or moving a scene trigger element.  \r\n\t \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t This interval polls these parameters to fire the necessary events.  \r\n\t \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t If you don't use custom containers, trigger elements or have static layouts, where the positions of the trigger elements don't change, you can set this to 0 disable interval checking and improve performance.\r\n\t *\r\n\t */\r\n\tScrollMagic.Controller = function (options) {\r\n\t\t/*\r\n\t\t * ----------------------------------------------------------------\r\n\t\t * settings\r\n\t\t * ----------------------------------------------------------------\r\n\t\t */\r\n\t\tvar\r\n\t\t\tNAMESPACE = 'ScrollMagic.Controller',\r\n\t\t\tSCROLL_DIRECTION_FORWARD = 'FORWARD',\r\n\t\t\tSCROLL_DIRECTION_REVERSE = 'REVERSE',\r\n\t\t\tSCROLL_DIRECTION_PAUSED = 'PAUSED',\r\n\t\t\tDEFAULT_OPTIONS = CONTROLLER_OPTIONS.defaults;\r\n\r\n\t\t/*\r\n\t\t * ----------------------------------------------------------------\r\n\t\t * private vars\r\n\t\t * ----------------------------------------------------------------\r\n\t\t */\r\n\t\tvar\r\n\t\t\tController = this,\r\n\t\t\t_options = _util.extend({}, DEFAULT_OPTIONS, options),\r\n\t\t\t_sceneObjects = [],\r\n\t\t\t_updateScenesOnNextCycle = false, // can be boolean (true => all scenes) or an array of scenes to be updated\r\n\t\t\t_scrollPos = 0,\r\n\t\t\t_scrollDirection = SCROLL_DIRECTION_PAUSED,\r\n\t\t\t_isDocument = true,\r\n\t\t\t_viewPortSize = 0,\r\n\t\t\t_enabled = true,\r\n\t\t\t_updateTimeout,\r\n\t\t\t_refreshTimeout;\r\n\r\n\t\t/*\r\n\t\t * ----------------------------------------------------------------\r\n\t\t * private functions\r\n\t\t * ----------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * Internal constructor function of the ScrollMagic Controller\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar construct = function () {\r\n\t\t\tfor (var key in _options) {\r\n\t\t\t\tif (!DEFAULT_OPTIONS.hasOwnProperty(key)) {\r\n\t\t\t\t\tlog(2, \"WARNING: Unknown option \\\"\" + key + \"\\\"\");\r\n\t\t\t\t\tdelete _options[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t_options.container = _util.get.elements(_options.container)[0];\r\n\t\t\t// check ScrollContainer\r\n\t\t\tif (!_options.container) {\r\n\t\t\t\tlog(1, \"ERROR creating object \" + NAMESPACE + \": No valid scroll container supplied\");\r\n\t\t\t\tthrow NAMESPACE + \" init failed.\"; // cancel\r\n\t\t\t}\r\n\t\t\t_isDocument = _options.container === window || _options.container === document.body || !document.body.contains(_options.container);\r\n\t\t\t// normalize to window\r\n\t\t\tif (_isDocument) {\r\n\t\t\t\t_options.container = window;\r\n\t\t\t}\r\n\t\t\t// update container size immediately\r\n\t\t\t_viewPortSize = getViewportSize();\r\n\t\t\t// set event handlers\r\n\t\t\t_options.container.addEventListener(\"resize\", onChange);\r\n\t\t\t_options.container.addEventListener(\"scroll\", onChange);\r\n\r\n\t\t\tvar ri = parseInt(_options.refreshInterval, 10);\r\n\t\t\t_options.refreshInterval = _util.type.Number(ri) ? ri : DEFAULT_OPTIONS.refreshInterval;\r\n\t\t\tscheduleRefresh();\r\n\r\n\t\t\tlog(3, \"added new \" + NAMESPACE + \" controller (v\" + ScrollMagic.version + \")\");\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Schedule the next execution of the refresh function\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar scheduleRefresh = function () {\r\n\t\t\tif (_options.refreshInterval > 0) {\r\n\t\t\t\t_refreshTimeout = window.setTimeout(refresh, _options.refreshInterval);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Default function to get scroll pos - overwriteable using `Controller.scrollPos(newFunction)`\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar getScrollPos = function () {\r\n\t\t\treturn _options.vertical ? _util.get.scrollTop(_options.container) : _util.get.scrollLeft(_options.container);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Returns the current viewport Size (width vor horizontal, height for vertical)\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar getViewportSize = function () {\r\n\t\t\treturn _options.vertical ? _util.get.height(_options.container) : _util.get.width(_options.container);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Default function to set scroll pos - overwriteable using `Controller.scrollTo(newFunction)`\r\n\t\t * Make available publicly for pinned mousewheel workaround.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar setScrollPos = this._setScrollPos = function (pos) {\r\n\t\t\tif (_options.vertical) {\r\n\t\t\t\tif (_isDocument) {\r\n\t\t\t\t\twindow.scrollTo(_util.get.scrollLeft(), pos);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_options.container.scrollTop = pos;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (_isDocument) {\r\n\t\t\t\t\twindow.scrollTo(pos, _util.get.scrollTop());\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_options.container.scrollLeft = pos;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Handle updates in cycles instead of on scroll (performance)\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updateScenes = function () {\r\n\t\t\tif (_enabled && _updateScenesOnNextCycle) {\r\n\t\t\t\t// determine scenes to update\r\n\t\t\t\tvar scenesToUpdate = _util.type.Array(_updateScenesOnNextCycle) ? _updateScenesOnNextCycle : _sceneObjects.slice(0);\r\n\t\t\t\t// reset scenes\r\n\t\t\t\t_updateScenesOnNextCycle = false;\r\n\t\t\t\tvar oldScrollPos = _scrollPos;\r\n\t\t\t\t// update scroll pos now instead of onChange, as it might have changed since scheduling (i.e. in-browser smooth scroll)\r\n\t\t\t\t_scrollPos = Controller.scrollPos();\r\n\t\t\t\tvar deltaScroll = _scrollPos - oldScrollPos;\r\n\t\t\t\tif (deltaScroll !== 0) { // scroll position changed?\r\n\t\t\t\t\t_scrollDirection = (deltaScroll > 0) ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_REVERSE;\r\n\t\t\t\t}\r\n\t\t\t\t// reverse order of scenes if scrolling reverse\r\n\t\t\t\tif (_scrollDirection === SCROLL_DIRECTION_REVERSE) {\r\n\t\t\t\t\tscenesToUpdate.reverse();\r\n\t\t\t\t}\r\n\t\t\t\t// update scenes\r\n\t\t\t\tscenesToUpdate.forEach(function (scene, index) {\r\n\t\t\t\t\tlog(3, \"updating Scene \" + (index + 1) + \"/\" + scenesToUpdate.length + \" (\" + _sceneObjects.length + \" total)\");\r\n\t\t\t\t\tscene.update(true);\r\n\t\t\t\t});\r\n\t\t\t\tif (scenesToUpdate.length === 0 && _options.loglevel >= 3) {\r\n\t\t\t\t\tlog(3, \"updating 0 Scenes (nothing added to controller)\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Initializes rAF callback\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar debounceUpdate = function () {\r\n\t\t\t_updateTimeout = _util.rAF(updateScenes);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Handles Container changes\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar onChange = function (e) {\r\n\t\t\tlog(3, \"event fired causing an update:\", e.type);\r\n\t\t\tif (e.type == \"resize\") {\r\n\t\t\t\t// resize\r\n\t\t\t\t_viewPortSize = getViewportSize();\r\n\t\t\t\t_scrollDirection = SCROLL_DIRECTION_PAUSED;\r\n\t\t\t}\r\n\t\t\t// schedule update\r\n\t\t\tif (_updateScenesOnNextCycle !== true) {\r\n\t\t\t\t_updateScenesOnNextCycle = true;\r\n\t\t\t\tdebounceUpdate();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar refresh = function () {\r\n\t\t\tif (!_isDocument) {\r\n\t\t\t\t// simulate resize event. Only works for viewport relevant param (performance)\r\n\t\t\t\tif (_viewPortSize != getViewportSize()) {\r\n\t\t\t\t\tvar resizeEvent;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tresizeEvent = new Event('resize', {\r\n\t\t\t\t\t\t\tbubbles: false,\r\n\t\t\t\t\t\t\tcancelable: false\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} catch (e) { // stupid IE\r\n\t\t\t\t\t\tresizeEvent = document.createEvent(\"Event\");\r\n\t\t\t\t\t\tresizeEvent.initEvent(\"resize\", false, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_options.container.dispatchEvent(resizeEvent);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t_sceneObjects.forEach(function (scene, index) { // refresh all scenes\r\n\t\t\t\tscene.refresh();\r\n\t\t\t});\r\n\t\t\tscheduleRefresh();\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Send a debug message to the console.\r\n\t\t * provided publicly with _log for plugins\r\n\t\t * @private\r\n\t\t *\r\n\t\t * @param {number} loglevel - The loglevel required to initiate output for the message.\r\n\t\t * @param {...mixed} output - One or more variables that should be passed to the console.\r\n\t\t */\r\n\t\tvar log = this._log = function (loglevel, output) {\r\n\t\t\tif (_options.loglevel >= loglevel) {\r\n\t\t\t\tArray.prototype.splice.call(arguments, 1, 0, \"(\" + NAMESPACE + \") ->\");\r\n\t\t\t\t_util.log.apply(window, arguments);\r\n\t\t\t}\r\n\t\t};\r\n\t\t// for scenes we have getters for each option, but for the controller we don't, so we need to make it available externally for plugins\r\n\t\tthis._options = _options;\r\n\r\n\t\t/**\r\n\t\t * Sort scenes in ascending order of their start offset.\r\n\t\t * @private\r\n\t\t *\r\n\t\t * @param {array} ScenesArray - an array of ScrollMagic Scenes that should be sorted\r\n\t\t * @return {array} The sorted array of Scenes.\r\n\t\t */\r\n\t\tvar sortScenes = function (ScenesArray) {\r\n\t\t\tif (ScenesArray.length <= 1) {\r\n\t\t\t\treturn ScenesArray;\r\n\t\t\t} else {\r\n\t\t\t\tvar scenes = ScenesArray.slice(0);\r\n\t\t\t\tscenes.sort(function (a, b) {\r\n\t\t\t\t\treturn a.scrollOffset() > b.scrollOffset() ? 1 : -1;\r\n\t\t\t\t});\r\n\t\t\t\treturn scenes;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * ----------------------------------------------------------------\r\n\t\t * public functions\r\n\t\t * ----------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * Add one ore more scene(s) to the controller.  \r\n\t\t * This is the equivalent to `Scene.addTo(controller)`.\r\n\t\t * @public\r\n\t\t * @example\r\n\t\t * // with a previously defined scene\r\n\t\t * controller.addScene(scene);\r\n\t\t *\r\n\t\t * // with a newly created scene.\r\n\t\t * controller.addScene(new ScrollMagic.Scene({duration : 0}));\r\n\t\t *\r\n\t\t * // adding multiple scenes\r\n\t\t * controller.addScene([scene, scene2, new ScrollMagic.Scene({duration : 0})]);\r\n\t\t *\r\n\t\t * @param {(ScrollMagic.Scene|array)} newScene - ScrollMagic Scene or Array of Scenes to be added to the controller.\r\n\t\t * @return {Controller} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.addScene = function (newScene) {\r\n\t\t\tif (_util.type.Array(newScene)) {\r\n\t\t\t\tnewScene.forEach(function (scene, index) {\r\n\t\t\t\t\tController.addScene(scene);\r\n\t\t\t\t});\r\n\t\t\t} else if (newScene instanceof ScrollMagic.Scene) {\r\n\t\t\t\tif (newScene.controller() !== Controller) {\r\n\t\t\t\t\tnewScene.addTo(Controller);\r\n\t\t\t\t} else if (_sceneObjects.indexOf(newScene) < 0) {\r\n\t\t\t\t\t// new scene\r\n\t\t\t\t\t_sceneObjects.push(newScene); // add to array\r\n\t\t\t\t\t_sceneObjects = sortScenes(_sceneObjects); // sort\r\n\t\t\t\t\tnewScene.on(\"shift.controller_sort\", function () { // resort whenever scene moves\r\n\t\t\t\t\t\t_sceneObjects = sortScenes(_sceneObjects);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// insert Global defaults.\r\n\t\t\t\t\tfor (var key in _options.globalSceneOptions) {\r\n\t\t\t\t\t\tif (newScene[key]) {\r\n\t\t\t\t\t\t\tnewScene[key].call(newScene, _options.globalSceneOptions[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlog(3, \"adding Scene (now \" + _sceneObjects.length + \" total)\");\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tlog(1, \"ERROR: invalid argument supplied for '.addScene()'\");\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Remove one ore more scene(s) from the controller.  \r\n\t\t * This is the equivalent to `Scene.remove()`.\r\n\t\t * @public\r\n\t\t * @example\r\n\t\t * // remove a scene from the controller\r\n\t\t * controller.removeScene(scene);\r\n\t\t *\r\n\t\t * // remove multiple scenes from the controller\r\n\t\t * controller.removeScene([scene, scene2, scene3]);\r\n\t\t *\r\n\t\t * @param {(ScrollMagic.Scene|array)} Scene - ScrollMagic Scene or Array of Scenes to be removed from the controller.\r\n\t\t * @returns {Controller} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.removeScene = function (Scene) {\r\n\t\t\tif (_util.type.Array(Scene)) {\r\n\t\t\t\tScene.forEach(function (scene, index) {\r\n\t\t\t\t\tController.removeScene(scene);\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tvar index = _sceneObjects.indexOf(Scene);\r\n\t\t\t\tif (index > -1) {\r\n\t\t\t\t\tScene.off(\"shift.controller_sort\");\r\n\t\t\t\t\t_sceneObjects.splice(index, 1);\r\n\t\t\t\t\tlog(3, \"removing Scene (now \" + _sceneObjects.length + \" left)\");\r\n\t\t\t\t\tScene.remove();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t * Update one ore more scene(s) according to the scroll position of the container.  \r\n\t * This is the equivalent to `Scene.update()`.  \r\n\t * The update method calculates the scene's start and end position (based on the trigger element, trigger hook, duration and offset) and checks it against the current scroll position of the container.  \r\n\t * It then updates the current scene state accordingly (or does nothing, if the state is already correct) – Pins will be set to their correct position and tweens will be updated to their correct progress.  \r\n\t * _**Note:** This method gets called constantly whenever Controller detects a change. The only application for you is if you change something outside of the realm of ScrollMagic, like moving the trigger or changing tween parameters._\r\n\t * @public\r\n\t * @example\r\n\t * // update a specific scene on next cycle\r\n \t * controller.updateScene(scene);\r\n \t *\r\n\t * // update a specific scene immediately\r\n\t * controller.updateScene(scene, true);\r\n \t *\r\n\t * // update multiple scenes scene on next cycle\r\n\t * controller.updateScene([scene1, scene2, scene3]);\r\n\t *\r\n\t * @param {ScrollMagic.Scene} Scene - ScrollMagic Scene or Array of Scenes that is/are supposed to be updated.\r\n\t * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle.  \r\n\t \t\t\t\t\t\t\t\t\t\t  This is useful when changing multiple properties of the scene - this way it will only be updated once all new properties are set (updateScenes).\r\n\t * @return {Controller} Parent object for chaining.\r\n\t */\r\n\t\tthis.updateScene = function (Scene, immediately) {\r\n\t\t\tif (_util.type.Array(Scene)) {\r\n\t\t\t\tScene.forEach(function (scene, index) {\r\n\t\t\t\t\tController.updateScene(scene, immediately);\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tif (immediately) {\r\n\t\t\t\t\tScene.update(true);\r\n\t\t\t\t} else if (_updateScenesOnNextCycle !== true && Scene instanceof ScrollMagic.Scene) { // if _updateScenesOnNextCycle is true, all connected scenes are already scheduled for update\r\n\t\t\t\t\t// prep array for next update cycle\r\n\t\t\t\t\t_updateScenesOnNextCycle = _updateScenesOnNextCycle || [];\r\n\t\t\t\t\tif (_updateScenesOnNextCycle.indexOf(Scene) == -1) {\r\n\t\t\t\t\t\t_updateScenesOnNextCycle.push(Scene);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_updateScenesOnNextCycle = sortScenes(_updateScenesOnNextCycle); // sort\r\n\t\t\t\t\tdebounceUpdate();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Updates the controller params and calls updateScene on every scene, that is attached to the controller.  \r\n\t\t * See `Controller.updateScene()` for more information about what this means.  \r\n\t\t * In most cases you will not need this function, as it is called constantly, whenever ScrollMagic detects a state change event, like resize or scroll.  \r\n\t\t * The only application for this method is when ScrollMagic fails to detect these events.  \r\n\t\t * One application is with some external scroll libraries (like iScroll) that move an internal container to a negative offset instead of actually scrolling. In this case the update on the controller needs to be called whenever the child container's position changes.\r\n\t\t * For this case there will also be the need to provide a custom function to calculate the correct scroll position. See `Controller.scrollPos()` for details.\r\n\t\t * @public\r\n\t\t * @example\r\n\t\t * // update the controller on next cycle (saves performance due to elimination of redundant updates)\r\n\t\t * controller.update();\r\n\t\t *\r\n\t\t * // update the controller immediately\r\n\t\t * controller.update(true);\r\n\t\t *\r\n\t\t * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle (better performance)\r\n\t\t * @return {Controller} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.update = function (immediately) {\r\n\t\t\tonChange({\r\n\t\t\t\ttype: \"resize\"\r\n\t\t\t}); // will update size and set _updateScenesOnNextCycle to true\r\n\t\t\tif (immediately) {\r\n\t\t\t\tupdateScenes();\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Scroll to a numeric scroll offset, a DOM element, the start of a scene or provide an alternate method for scrolling.  \r\n\t\t * For vertical controllers it will change the top scroll offset and for horizontal applications it will change the left offset.\r\n\t\t * @public\r\n\t\t *\r\n\t\t * @since 1.1.0\r\n\t\t * @example\r\n\t\t * // scroll to an offset of 100\r\n\t\t * controller.scrollTo(100);\r\n\t\t *\r\n\t\t * // scroll to a DOM element\r\n\t\t * controller.scrollTo(\"#anchor\");\r\n\t\t *\r\n\t\t * // scroll to the beginning of a scene\r\n\t\t * var scene = new ScrollMagic.Scene({offset: 200});\r\n\t\t * controller.scrollTo(scene);\r\n\t\t *\r\n\t\t * // define a new scroll position modification function (jQuery animate instead of jump)\r\n\t\t * controller.scrollTo(function (newScrollPos) {\r\n\t\t *\t$(\"html, body\").animate({scrollTop: newScrollPos});\r\n\t\t * });\r\n\t\t * controller.scrollTo(100); // call as usual, but the new function will be used instead\r\n\t\t *\r\n\t\t * // define a new scroll function with an additional parameter\r\n\t\t * controller.scrollTo(function (newScrollPos, message) {\r\n\t\t *  console.log(message);\r\n\t\t *\t$(this).animate({scrollTop: newScrollPos});\r\n\t\t * });\r\n\t\t * // call as usual, but supply an extra parameter to the defined custom function\r\n\t\t * controller.scrollTo(100, \"my message\");\r\n\t\t *\r\n\t\t * // define a new scroll function with an additional parameter containing multiple variables\r\n\t\t * controller.scrollTo(function (newScrollPos, options) {\r\n\t\t *  someGlobalVar = options.a + options.b;\r\n\t\t *\t$(this).animate({scrollTop: newScrollPos});\r\n\t\t * });\r\n\t\t * // call as usual, but supply an extra parameter containing multiple options\r\n\t\t * controller.scrollTo(100, {a: 1, b: 2});\r\n\t\t *\r\n\t\t * // define a new scroll function with a callback supplied as an additional parameter\r\n\t\t * controller.scrollTo(function (newScrollPos, callback) {\r\n\t\t *\t$(this).animate({scrollTop: newScrollPos}, 400, \"swing\", callback);\r\n\t\t * });\r\n\t\t * // call as usual, but supply an extra parameter, which is used as a callback in the previously defined custom scroll function\r\n\t\t * controller.scrollTo(100, function() {\r\n\t\t *\tconsole.log(\"scroll has finished.\");\r\n\t\t * });\r\n\t\t *\r\n\t\t * @param {mixed} scrollTarget - The supplied argument can be one of these types:\r\n\t\t * 1. `number` -> The container will scroll to this new scroll offset.\r\n\t\t * 2. `string` or `object` -> Can be a selector or a DOM object.  \r\n\t\t *  The container will scroll to the position of this element.\r\n\t\t * 3. `ScrollMagic Scene` -> The container will scroll to the start of this scene.\r\n\t\t * 4. `function` -> This function will be used for future scroll position modifications.  \r\n\t\t *  This provides a way for you to change the behaviour of scrolling and adding new behaviour like animation. The function receives the new scroll position as a parameter and a reference to the container element using `this`.  \r\n\t\t *  It may also optionally receive an optional additional parameter (see below)  \r\n\t\t *  _**NOTE:**  \r\n\t\t *  All other options will still work as expected, using the new function to scroll._\r\n\t\t * @param {mixed} [additionalParameter] - If a custom scroll function was defined (see above 4.), you may want to supply additional parameters to it, when calling it. You can do this using this parameter – see examples for details. Please note, that this parameter will have no effect, if you use the default scrolling function.\r\n\t\t * @returns {Controller} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.scrollTo = function (scrollTarget, additionalParameter) {\r\n\t\t\tif (_util.type.Number(scrollTarget)) { // excecute\r\n\t\t\t\tsetScrollPos.call(_options.container, scrollTarget, additionalParameter);\r\n\t\t\t} else if (scrollTarget instanceof ScrollMagic.Scene) { // scroll to scene\r\n\t\t\t\tif (scrollTarget.controller() === Controller) { // check if the controller is associated with this scene\r\n\t\t\t\t\tController.scrollTo(scrollTarget.scrollOffset(), additionalParameter);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlog(2, \"scrollTo(): The supplied scene does not belong to this controller. Scroll cancelled.\", scrollTarget);\r\n\t\t\t\t}\r\n\t\t\t} else if (_util.type.Function(scrollTarget)) { // assign new scroll function\r\n\t\t\t\tsetScrollPos = scrollTarget;\r\n\t\t\t} else { // scroll to element\r\n\t\t\t\tvar elem = _util.get.elements(scrollTarget)[0];\r\n\t\t\t\tif (elem) {\r\n\t\t\t\t\t// if parent is pin spacer, use spacer position instead so correct start position is returned for pinned elements.\r\n\t\t\t\t\twhile (elem.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) {\r\n\t\t\t\t\t\telem = elem.parentNode;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tparam = _options.vertical ? \"top\" : \"left\", // which param is of interest ?\r\n\t\t\t\t\t\tcontainerOffset = _util.get.offset(_options.container), // container position is needed because element offset is returned in relation to document, not in relation to container.\r\n\t\t\t\t\t\telementOffset = _util.get.offset(elem);\r\n\r\n\t\t\t\t\tif (!_isDocument) { // container is not the document root, so substract scroll Position to get correct trigger element position relative to scrollcontent\r\n\t\t\t\t\t\tcontainerOffset[param] -= Controller.scrollPos();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tController.scrollTo(elementOffset[param] - containerOffset[param], additionalParameter);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlog(2, \"scrollTo(): The supplied argument is invalid. Scroll cancelled.\", scrollTarget);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** the current scrollPosition or **Set** a new method to calculate it.  \r\n\t\t * -> **GET**:\r\n\t\t * When used as a getter this function will return the current scroll position.  \r\n\t\t * To get a cached value use Controller.info(\"scrollPos\"), which will be updated in the update cycle.  \r\n\t\t * For vertical controllers it will return the top scroll offset and for horizontal applications it will return the left offset.\r\n\t\t *\r\n\t\t * -> **SET**:\r\n\t\t * When used as a setter this method prodes a way to permanently overwrite the controller's scroll position calculation.  \r\n\t\t * A typical usecase is when the scroll position is not reflected by the containers scrollTop or scrollLeft values, but for example by the inner offset of a child container.  \r\n\t\t * Moving a child container inside a parent is a commonly used method for several scrolling frameworks, including iScroll.  \r\n\t\t * By providing an alternate calculation function you can make sure ScrollMagic receives the correct scroll position.  \r\n\t\t * Please also bear in mind that your function should return y values for vertical scrolls an x for horizontals.\r\n\t\t *\r\n\t\t * To change the current scroll position please use `Controller.scrollTo()`.\r\n\t\t * @public\r\n\t\t *\r\n\t\t * @example\r\n\t\t * // get the current scroll Position\r\n\t\t * var scrollPos = controller.scrollPos();\r\n\t\t *\r\n\t\t * // set a new scroll position calculation method\r\n\t\t * controller.scrollPos(function () {\r\n\t\t *\treturn this.info(\"vertical\") ? -mychildcontainer.y : -mychildcontainer.x\r\n\t\t * });\r\n\t\t *\r\n\t\t * @param {function} [scrollPosMethod] - The function to be used for the scroll position calculation of the container.\r\n\t\t * @returns {(number|Controller)} Current scroll position or parent object for chaining.\r\n\t\t */\r\n\t\tthis.scrollPos = function (scrollPosMethod) {\r\n\t\t\tif (!arguments.length) { // get\r\n\t\t\t\treturn getScrollPos.call(Controller);\r\n\t\t\t} else { // set\r\n\t\t\t\tif (_util.type.Function(scrollPosMethod)) {\r\n\t\t\t\t\tgetScrollPos = scrollPosMethod;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlog(2, \"Provided value for method 'scrollPos' is not a function. To change the current scroll position use 'scrollTo()'.\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** all infos or one in particular about the controller.\r\n\t\t * @public\r\n\t\t * @example\r\n\t\t * // returns the current scroll position (number)\r\n\t\t * var scrollPos = controller.info(\"scrollPos\");\r\n\t\t *\r\n\t\t * // returns all infos as an object\r\n\t\t * var infos = controller.info();\r\n\t\t *\r\n\t\t * @param {string} [about] - If passed only this info will be returned instead of an object containing all.  \r\n\t\t \t\t\t\t\t\t\t Valid options are:\r\n\t\t \t\t\t\t\t\t\t ** `\"size\"` => the current viewport size of the container\r\n\t\t \t\t\t\t\t\t\t ** `\"vertical\"` => true if vertical scrolling, otherwise false\r\n\t\t \t\t\t\t\t\t\t ** `\"scrollPos\"` => the current scroll position\r\n\t\t \t\t\t\t\t\t\t ** `\"scrollDirection\"` => the last known direction of the scroll\r\n\t\t \t\t\t\t\t\t\t ** `\"container\"` => the container element\r\n\t\t \t\t\t\t\t\t\t ** `\"isDocument\"` => true if container element is the document.\r\n\t\t * @returns {(mixed|object)} The requested info(s).\r\n\t\t */\r\n\t\tthis.info = function (about) {\r\n\t\t\tvar values = {\r\n\t\t\t\tsize: _viewPortSize, // contains height or width (in regard to orientation);\r\n\t\t\t\tvertical: _options.vertical,\r\n\t\t\t\tscrollPos: _scrollPos,\r\n\t\t\t\tscrollDirection: _scrollDirection,\r\n\t\t\t\tcontainer: _options.container,\r\n\t\t\t\tisDocument: _isDocument\r\n\t\t\t};\r\n\t\t\tif (!arguments.length) { // get all as an object\r\n\t\t\t\treturn values;\r\n\t\t\t} else if (values[about] !== undefined) {\r\n\t\t\t\treturn values[about];\r\n\t\t\t} else {\r\n\t\t\t\tlog(1, \"ERROR: option \\\"\" + about + \"\\\" is not available\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the current loglevel option value.\r\n\t\t * @public\r\n\t\t *\r\n\t\t * @example\r\n\t\t * // get the current value\r\n\t\t * var loglevel = controller.loglevel();\r\n\t\t *\r\n\t\t * // set a new value\r\n\t\t * controller.loglevel(3);\r\n\t\t *\r\n\t\t * @param {number} [newLoglevel] - The new loglevel setting of the Controller. `[0-3]`\r\n\t\t * @returns {(number|Controller)} Current loglevel or parent object for chaining.\r\n\t\t */\r\n\t\tthis.loglevel = function (newLoglevel) {\r\n\t\t\tif (!arguments.length) { // get\r\n\t\t\t\treturn _options.loglevel;\r\n\t\t\t} else if (_options.loglevel != newLoglevel) { // set\r\n\t\t\t\t_options.loglevel = newLoglevel;\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the current enabled state of the controller.  \r\n\t\t * This can be used to disable all Scenes connected to the controller without destroying or removing them.\r\n\t\t * @public\r\n\t\t *\r\n\t\t * @example\r\n\t\t * // get the current value\r\n\t\t * var enabled = controller.enabled();\r\n\t\t *\r\n\t\t * // disable the controller\r\n\t\t * controller.enabled(false);\r\n\t\t *\r\n\t\t * @param {boolean} [newState] - The new enabled state of the controller `true` or `false`.\r\n\t\t * @returns {(boolean|Controller)} Current enabled state or parent object for chaining.\r\n\t\t */\r\n\t\tthis.enabled = function (newState) {\r\n\t\t\tif (!arguments.length) { // get\r\n\t\t\t\treturn _enabled;\r\n\t\t\t} else if (_enabled != newState) { // set\r\n\t\t\t\t_enabled = !!newState;\r\n\t\t\t\tController.updateScene(_sceneObjects, true);\r\n\t\t\t}\r\n\t\t\treturn Controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Destroy the Controller, all Scenes and everything.\r\n\t\t * @public\r\n\t\t *\r\n\t\t * @example\r\n\t\t * // without resetting the scenes\r\n\t\t * controller = controller.destroy();\r\n\t\t *\r\n\t\t * // with scene reset\r\n\t\t * controller = controller.destroy(true);\r\n\t\t *\r\n\t\t * @param {boolean} [resetScenes=false] - If `true` the pins and tweens (if existent) of all scenes will be reset.\r\n\t\t * @returns {null} Null to unset handler variables.\r\n\t\t */\r\n\t\tthis.destroy = function (resetScenes) {\r\n\t\t\twindow.clearTimeout(_refreshTimeout);\r\n\t\t\tvar i = _sceneObjects.length;\r\n\t\t\twhile (i--) {\r\n\t\t\t\t_sceneObjects[i].destroy(resetScenes);\r\n\t\t\t}\r\n\t\t\t_options.container.removeEventListener(\"resize\", onChange);\r\n\t\t\t_options.container.removeEventListener(\"scroll\", onChange);\r\n\t\t\t_util.cAF(_updateTimeout);\r\n\t\t\tlog(3, \"destroyed \" + NAMESPACE + \" (reset: \" + (resetScenes ? \"true\" : \"false\") + \")\");\r\n\t\t\treturn null;\r\n\t\t};\r\n\r\n\t\t// INIT\r\n\t\tconstruct();\r\n\t\treturn Controller;\r\n\t};\r\n\r\n\t// store pagewide controller options\r\n\tvar CONTROLLER_OPTIONS = {\r\n\t\tdefaults: {\r\n\t\t\tcontainer: window,\r\n\t\t\tvertical: true,\r\n\t\t\tglobalSceneOptions: {},\r\n\t\t\tloglevel: 2,\r\n\t\t\trefreshInterval: 100\r\n\t\t}\r\n\t};\r\n\t/*\r\n\t * method used to add an option to ScrollMagic Scenes.\r\n\t */\r\n\tScrollMagic.Controller.addOption = function (name, defaultValue) {\r\n\t\tCONTROLLER_OPTIONS.defaults[name] = defaultValue;\r\n\t};\r\n\t// instance extension function for plugins\r\n\tScrollMagic.Controller.extend = function (extension) {\r\n\t\tvar oldClass = this;\r\n\t\tScrollMagic.Controller = function () {\r\n\t\t\toldClass.apply(this, arguments);\r\n\t\t\tthis.$super = _util.extend({}, this); // copy parent state\r\n\t\t\treturn extension.apply(this, arguments) || this;\r\n\t\t};\r\n\t\t_util.extend(ScrollMagic.Controller, oldClass); // copy properties\r\n\t\tScrollMagic.Controller.prototype = oldClass.prototype; // copy prototype\r\n\t\tScrollMagic.Controller.prototype.constructor = ScrollMagic.Controller; // restore constructor\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * A Scene defines where the controller should react and how.\r\n\t *\r\n\t * @class\r\n\t *\r\n\t * @example\r\n\t * // create a standard scene and add it to a controller\r\n\t * new ScrollMagic.Scene()\r\n\t *\t\t.addTo(controller);\r\n\t *\r\n\t * // create a scene with custom options and assign a handler to it.\r\n\t * var scene = new ScrollMagic.Scene({\r\n\t * \t\tduration: 100,\r\n\t *\t\toffset: 200,\r\n\t *\t\ttriggerHook: \"onEnter\",\r\n\t *\t\treverse: false\r\n\t * });\r\n\t *\r\n\t * @param {object} [options] - Options for the Scene. The options can be updated at any time.  \r\n\t \t\t\t\t\t\t\t   Instead of setting the options for each scene individually you can also set them globally in the controller as the controllers `globalSceneOptions` option. The object accepts the same properties as the ones below.  \r\n\t \t\t\t\t\t\t\t   When a scene is added to the controller the options defined using the Scene constructor will be overwritten by those set in `globalSceneOptions`.\r\n\t * @param {(number|string|function)} [options.duration=0] - The duration of the scene. \r\n\t \t\t\t\t\tPlease see `Scene.duration()` for details.\r\n\t * @param {number} [options.offset=0] - Offset Value for the Trigger Position. If no triggerElement is defined this will be the scroll distance from the start of the page, after which the scene will start.\r\n\t * @param {(string|object)} [options.triggerElement=null] - Selector or DOM object that defines the start of the scene. If undefined the scene will start right at the start of the page (unless an offset is set).\r\n\t * @param {(number|string)} [options.triggerHook=\"onCenter\"] - Can be a number between 0 and 1 defining the position of the trigger Hook in relation to the viewport.  \r\n\t \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  Can also be defined using a string:\r\n\t \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  ** `\"onEnter\"` => `1`\r\n\t \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  ** `\"onCenter\"` => `0.5`\r\n\t \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  ** `\"onLeave\"` => `0`\r\n\t * @param {boolean} [options.reverse=true] - Should the scene reverse, when scrolling up?\r\n\t * @param {number} [options.loglevel=2] - Loglevel for debugging. Note that logging is disabled in the minified version of ScrollMagic.\r\n\t \t\t\t\t\t\t\t\t\t\t  ** `0` => silent\r\n\t \t\t\t\t\t\t\t\t\t\t  ** `1` => errors\r\n\t \t\t\t\t\t\t\t\t\t\t  ** `2` => errors, warnings\r\n\t \t\t\t\t\t\t\t\t\t\t  ** `3` => errors, warnings, debuginfo\r\n\t * \r\n\t */\r\n\tScrollMagic.Scene = function (options) {\r\n\r\n\t\t/*\r\n\t\t * ----------------------------------------------------------------\r\n\t\t * settings\r\n\t\t * ----------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tvar\r\n\t\t\tNAMESPACE = 'ScrollMagic.Scene',\r\n\t\t\tSCENE_STATE_BEFORE = 'BEFORE',\r\n\t\t\tSCENE_STATE_DURING = 'DURING',\r\n\t\t\tSCENE_STATE_AFTER = 'AFTER',\r\n\t\t\tDEFAULT_OPTIONS = SCENE_OPTIONS.defaults;\r\n\r\n\t\t/*\r\n\t\t * ----------------------------------------------------------------\r\n\t\t * private vars\r\n\t\t * ----------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tvar\r\n\t\t\tScene = this,\r\n\t\t\t_options = _util.extend({}, DEFAULT_OPTIONS, options),\r\n\t\t\t_state = SCENE_STATE_BEFORE,\r\n\t\t\t_progress = 0,\r\n\t\t\t_scrollOffset = {\r\n\t\t\t\tstart: 0,\r\n\t\t\t\tend: 0\r\n\t\t\t}, // reflects the controllers's scroll position for the start and end of the scene respectively\r\n\t\t\t_triggerPos = 0,\r\n\t\t\t_enabled = true,\r\n\t\t\t_durationUpdateMethod,\r\n\t\t\t_controller;\r\n\r\n\t\t/**\r\n\t\t * Internal constructor function of the ScrollMagic Scene\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar construct = function () {\r\n\t\t\tfor (var key in _options) { // check supplied options\r\n\t\t\t\tif (!DEFAULT_OPTIONS.hasOwnProperty(key)) {\r\n\t\t\t\t\tlog(2, \"WARNING: Unknown option \\\"\" + key + \"\\\"\");\r\n\t\t\t\t\tdelete _options[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// add getters/setters for all possible options\r\n\t\t\tfor (var optionName in DEFAULT_OPTIONS) {\r\n\t\t\t\taddSceneOption(optionName);\r\n\t\t\t}\r\n\t\t\t// validate all options\r\n\t\t\tvalidateOption();\r\n\t\t};\r\n\r\n\t\t/*\r\n\t\t * ----------------------------------------------------------------\r\n\t\t * Event Management\r\n\t\t * ----------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tvar _listeners = {};\r\n\t\t/**\r\n\t\t * Scene start event.  \r\n\t\t * Fires whenever the scroll position its the starting point of the scene.  \r\n\t\t * It will also fire when scrolling back up going over the start position of the scene. If you want something to happen only when scrolling down/right, use the scrollDirection parameter passed to the callback.\r\n\t\t *\r\n\t\t * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#start\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"start\", function (event) {\r\n\t\t * \tconsole.log(\"Hit start point of scene.\");\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {number} event.progress - Reflects the current progress of the scene\r\n\t\t * @property {string} event.state - The current state of the scene `\"BEFORE\"` or `\"DURING\"`\r\n\t\t * @property {string} event.scrollDirection - Indicates which way we are scrolling `\"PAUSED\"`, `\"FORWARD\"` or `\"REVERSE\"`\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene end event.  \r\n\t\t * Fires whenever the scroll position its the ending point of the scene.  \r\n\t\t * It will also fire when scrolling back up from after the scene and going over its end position. If you want something to happen only when scrolling down/right, use the scrollDirection parameter passed to the callback.\r\n\t\t *\r\n\t\t * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#end\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"end\", function (event) {\r\n\t\t * \tconsole.log(\"Hit end point of scene.\");\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {number} event.progress - Reflects the current progress of the scene\r\n\t\t * @property {string} event.state - The current state of the scene `\"DURING\"` or `\"AFTER\"`\r\n\t\t * @property {string} event.scrollDirection - Indicates which way we are scrolling `\"PAUSED\"`, `\"FORWARD\"` or `\"REVERSE\"`\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene enter event.  \r\n\t\t * Fires whenever the scene enters the \"DURING\" state.  \r\n\t\t * Keep in mind that it doesn't matter if the scene plays forward or backward: This event always fires when the scene enters its active scroll timeframe, regardless of the scroll-direction.\r\n\t\t *\r\n\t\t * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#enter\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"enter\", function (event) {\r\n\t\t * \tconsole.log(\"Scene entered.\");\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {number} event.progress - Reflects the current progress of the scene\r\n\t\t * @property {string} event.state - The current state of the scene - always `\"DURING\"`\r\n\t\t * @property {string} event.scrollDirection - Indicates which way we are scrolling `\"PAUSED\"`, `\"FORWARD\"` or `\"REVERSE\"`\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene leave event.  \r\n\t\t * Fires whenever the scene's state goes from \"DURING\" to either \"BEFORE\" or \"AFTER\".  \r\n\t\t * Keep in mind that it doesn't matter if the scene plays forward or backward: This event always fires when the scene leaves its active scroll timeframe, regardless of the scroll-direction.\r\n\t\t *\r\n\t\t * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#leave\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"leave\", function (event) {\r\n\t\t * \tconsole.log(\"Scene left.\");\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {number} event.progress - Reflects the current progress of the scene\r\n\t\t * @property {string} event.state - The current state of the scene `\"BEFORE\"` or `\"AFTER\"`\r\n\t\t * @property {string} event.scrollDirection - Indicates which way we are scrolling `\"PAUSED\"`, `\"FORWARD\"` or `\"REVERSE\"`\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene update event.  \r\n\t\t * Fires whenever the scene is updated (but not necessarily changes the progress).\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#update\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"update\", function (event) {\r\n\t\t * \tconsole.log(\"Scene updated.\");\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {number} event.startPos - The starting position of the scene (in relation to the conainer)\r\n\t\t * @property {number} event.endPos - The ending position of the scene (in relation to the conainer)\r\n\t\t * @property {number} event.scrollPos - The current scroll position of the container\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene progress event.  \r\n\t\t * Fires whenever the progress of the scene changes.\r\n\t\t *\r\n\t\t * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#progress\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"progress\", function (event) {\r\n\t\t * \tconsole.log(\"Scene progress changed to \" + event.progress);\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {number} event.progress - Reflects the current progress of the scene\r\n\t\t * @property {string} event.state - The current state of the scene `\"BEFORE\"`, `\"DURING\"` or `\"AFTER\"`\r\n\t\t * @property {string} event.scrollDirection - Indicates which way we are scrolling `\"PAUSED\"`, `\"FORWARD\"` or `\"REVERSE\"`\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene change event.  \r\n\t\t * Fires whenvever a property of the scene is changed.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#change\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"change\", function (event) {\r\n\t\t * \tconsole.log(\"Scene Property \\\"\" + event.what + \"\\\" changed to \" + event.newval);\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {string} event.what - Indicates what value has been changed\r\n\t\t * @property {mixed} event.newval - The new value of the changed property\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene shift event.  \r\n\t\t * Fires whenvever the start or end **scroll offset** of the scene change.\r\n\t\t * This happens explicitely, when one of these values change: `offset`, `duration` or `triggerHook`.\r\n\t\t * It will fire implicitly when the `triggerElement` changes, if the new element has a different position (most cases).\r\n\t\t * It will also fire implicitly when the size of the container changes and the triggerHook is anything other than `onLeave`.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#shift\r\n\t\t * @since 1.1.0\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"shift\", function (event) {\r\n\t\t * \tconsole.log(\"Scene moved, because the \" + event.reason + \" has changed.)\");\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {string} event.reason - Indicates why the scene has shifted\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene destroy event.  \r\n\t\t * Fires whenvever the scene is destroyed.\r\n\t\t * This can be used to tidy up custom behaviour used in events.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#destroy\r\n\t\t * @since 1.1.0\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"enter\", function (event) {\r\n\t\t *        // add custom action\r\n\t\t *        $(\"#my-elem\").left(\"200\");\r\n\t\t *      })\r\n\t\t *      .on(\"destroy\", function (event) {\r\n\t\t *        // reset my element to start position\r\n\t\t *        if (event.reset) {\r\n\t\t *          $(\"#my-elem\").left(\"0\");\r\n\t\t *        }\r\n\t\t *      });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {boolean} event.reset - Indicates if the destroy method was called with reset `true` or `false`.\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene add event.  \r\n\t\t * Fires when the scene is added to a controller.\r\n\t\t * This is mostly used by plugins to know that change might be due.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#add\r\n\t\t * @since 2.0.0\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"add\", function (event) {\r\n\t\t * \tconsole.log('Scene was added to a new controller.');\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t * @property {boolean} event.controller - The controller object the scene was added to.\r\n\t\t */\r\n\t\t/**\r\n\t\t * Scene remove event.  \r\n\t\t * Fires when the scene is removed from a controller.\r\n\t\t * This is mostly used by plugins to know that change might be due.\r\n\t\t *\r\n\t\t * @event ScrollMagic.Scene#remove\r\n\t\t * @since 2.0.0\r\n\t\t *\r\n\t\t * @example\r\n\t\t * scene.on(\"remove\", function (event) {\r\n\t\t * \tconsole.log('Scene was removed from its controller.');\r\n\t\t * });\r\n\t\t *\r\n\t\t * @property {object} event - The event Object passed to each callback\r\n\t\t * @property {string} event.type - The name of the event\r\n\t\t * @property {Scene} event.target - The Scene object that triggered this event\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * Add one ore more event listener.  \r\n\t\t * The callback function will be fired at the respective event, and an object containing relevant data will be passed to the callback.\r\n\t\t * @method ScrollMagic.Scene#on\r\n\t\t *\r\n\t\t * @example\r\n\t\t * function callback (event) {\r\n\t\t * \t\tconsole.log(\"Event fired! (\" + event.type + \")\");\r\n\t\t * }\r\n\t\t * // add listeners\r\n\t\t * scene.on(\"change update progress start end enter leave\", callback);\r\n\t\t *\r\n\t\t * @param {string} names - The name or names of the event the callback should be attached to.\r\n\t\t * @param {function} callback - A function that should be executed, when the event is dispatched. An event object will be passed to the callback.\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.on = function (names, callback) {\r\n\t\t\tif (_util.type.Function(callback)) {\r\n\t\t\t\tnames = names.trim().split(' ');\r\n\t\t\t\tnames.forEach(function (fullname) {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tnameparts = fullname.split('.'),\r\n\t\t\t\t\t\teventname = nameparts[0],\r\n\t\t\t\t\t\tnamespace = nameparts[1];\r\n\t\t\t\t\tif (eventname != \"*\") { // disallow wildcards\r\n\t\t\t\t\t\tif (!_listeners[eventname]) {\r\n\t\t\t\t\t\t\t_listeners[eventname] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t_listeners[eventname].push({\r\n\t\t\t\t\t\t\tnamespace: namespace || '',\r\n\t\t\t\t\t\t\tcallback: callback\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tlog(1, \"ERROR when calling '.on()': Supplied callback for '\" + names + \"' is not a valid function!\");\r\n\t\t\t}\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Remove one or more event listener.\r\n\t\t * @method ScrollMagic.Scene#off\r\n\t\t *\r\n\t\t * @example\r\n\t\t * function callback (event) {\r\n\t\t * \t\tconsole.log(\"Event fired! (\" + event.type + \")\");\r\n\t\t * }\r\n\t\t * // add listeners\r\n\t\t * scene.on(\"change update\", callback);\r\n\t\t * // remove listeners\r\n\t\t * scene.off(\"change update\", callback);\r\n\t\t *\r\n\t\t * @param {string} names - The name or names of the event that should be removed.\r\n\t\t * @param {function} [callback] - A specific callback function that should be removed. If none is passed all callbacks to the event listener will be removed.\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.off = function (names, callback) {\r\n\t\t\tif (!names) {\r\n\t\t\t\tlog(1, \"ERROR: Invalid event name supplied.\");\r\n\t\t\t\treturn Scene;\r\n\t\t\t}\r\n\t\t\tnames = names.trim().split(' ');\r\n\t\t\tnames.forEach(function (fullname, key) {\r\n\t\t\t\tvar\r\n\t\t\t\t\tnameparts = fullname.split('.'),\r\n\t\t\t\t\teventname = nameparts[0],\r\n\t\t\t\t\tnamespace = nameparts[1] || '',\r\n\t\t\t\t\tremoveList = eventname === '*' ? Object.keys(_listeners) : [eventname];\r\n\t\t\t\tremoveList.forEach(function (remove) {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tlist = _listeners[remove] || [],\r\n\t\t\t\t\t\ti = list.length;\r\n\t\t\t\t\twhile (i--) {\r\n\t\t\t\t\t\tvar listener = list[i];\r\n\t\t\t\t\t\tif (listener && (namespace === listener.namespace || namespace === '*') && (!callback || callback == listener.callback)) {\r\n\t\t\t\t\t\t\tlist.splice(i, 1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!list.length) {\r\n\t\t\t\t\t\tdelete _listeners[remove];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Trigger an event.\r\n\t\t * @method ScrollMagic.Scene#trigger\r\n\t\t *\r\n\t\t * @example\r\n\t\t * this.trigger(\"change\");\r\n\t\t *\r\n\t\t * @param {string} name - The name of the event that should be triggered.\r\n\t\t * @param {object} [vars] - An object containing info that should be passed to the callback.\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.trigger = function (name, vars) {\r\n\t\t\tif (name) {\r\n\t\t\t\tvar\r\n\t\t\t\t\tnameparts = name.trim().split('.'),\r\n\t\t\t\t\teventname = nameparts[0],\r\n\t\t\t\t\tnamespace = nameparts[1],\r\n\t\t\t\t\tlisteners = _listeners[eventname];\r\n\t\t\t\tlog(3, 'event fired:', eventname, vars ? \"->\" : '', vars || '');\r\n\t\t\t\tif (listeners) {\r\n\t\t\t\t\tlisteners.forEach(function (listener, key) {\r\n\t\t\t\t\t\tif (!namespace || namespace === listener.namespace) {\r\n\t\t\t\t\t\t\tlistener.callback.call(Scene, new ScrollMagic.Event(eventname, listener.namespace, Scene, vars));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tlog(1, \"ERROR: Invalid event name supplied.\");\r\n\t\t\t}\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t// set event listeners\r\n\t\tScene\r\n\t\t\t.on(\"change.internal\", function (e) {\r\n\t\t\t\tif (e.what !== \"loglevel\" && e.what !== \"tweenChanges\") { // no need for a scene update scene with these options...\r\n\t\t\t\t\tif (e.what === \"triggerElement\") {\r\n\t\t\t\t\t\tupdateTriggerElementPosition();\r\n\t\t\t\t\t} else if (e.what === \"reverse\") { // the only property left that may have an impact on the current scene state. Everything else is handled by the shift event.\r\n\t\t\t\t\t\tScene.update();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on(\"shift.internal\", function (e) {\r\n\t\t\t\tupdateScrollOffset();\r\n\t\t\t\tScene.update(); // update scene to reflect new position\r\n\t\t\t});\r\n\r\n\t\t/**\r\n\t\t * Send a debug message to the console.\r\n\t\t * @private\r\n\t\t * but provided publicly with _log for plugins\r\n\t\t *\r\n\t\t * @param {number} loglevel - The loglevel required to initiate output for the message.\r\n\t\t * @param {...mixed} output - One or more variables that should be passed to the console.\r\n\t\t */\r\n\t\tvar log = this._log = function (loglevel, output) {\r\n\t\t\tif (_options.loglevel >= loglevel) {\r\n\t\t\t\tArray.prototype.splice.call(arguments, 1, 0, \"(\" + NAMESPACE + \") ->\");\r\n\t\t\t\t_util.log.apply(window, arguments);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Add the scene to a controller.  \r\n\t\t * This is the equivalent to `Controller.addScene(scene)`.\r\n\t\t * @method ScrollMagic.Scene#addTo\r\n\t\t *\r\n\t\t * @example\r\n\t\t * // add a scene to a ScrollMagic Controller\r\n\t\t * scene.addTo(controller);\r\n\t\t *\r\n\t\t * @param {ScrollMagic.Controller} controller - The controller to which the scene should be added.\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.addTo = function (controller) {\r\n\t\t\tif (!(controller instanceof ScrollMagic.Controller)) {\r\n\t\t\t\tlog(1, \"ERROR: supplied argument of 'addTo()' is not a valid ScrollMagic Controller\");\r\n\t\t\t} else if (_controller != controller) {\r\n\t\t\t\t// new controller\r\n\t\t\t\tif (_controller) { // was associated to a different controller before, so remove it...\r\n\t\t\t\t\t_controller.removeScene(Scene);\r\n\t\t\t\t}\r\n\t\t\t\t_controller = controller;\r\n\t\t\t\tvalidateOption();\r\n\t\t\t\tupdateDuration(true);\r\n\t\t\t\tupdateTriggerElementPosition(true);\r\n\t\t\t\tupdateScrollOffset();\r\n\t\t\t\t_controller.info(\"container\").addEventListener('resize', onContainerResize);\r\n\t\t\t\tcontroller.addScene(Scene);\r\n\t\t\t\tScene.trigger(\"add\", {\r\n\t\t\t\t\tcontroller: _controller\r\n\t\t\t\t});\r\n\t\t\t\tlog(3, \"added \" + NAMESPACE + \" to controller\");\r\n\t\t\t\tScene.update();\r\n\t\t\t}\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the current enabled state of the scene.  \r\n\t\t * This can be used to disable this scene without removing or destroying it.\r\n\t\t * @method ScrollMagic.Scene#enabled\r\n\t\t *\r\n\t\t * @example\r\n\t\t * // get the current value\r\n\t\t * var enabled = scene.enabled();\r\n\t\t *\r\n\t\t * // disable the scene\r\n\t\t * scene.enabled(false);\r\n\t\t *\r\n\t\t * @param {boolean} [newState] - The new enabled state of the scene `true` or `false`.\r\n\t\t * @returns {(boolean|Scene)} Current enabled state or parent object for chaining.\r\n\t\t */\r\n\t\tthis.enabled = function (newState) {\r\n\t\t\tif (!arguments.length) { // get\r\n\t\t\t\treturn _enabled;\r\n\t\t\t} else if (_enabled != newState) { // set\r\n\t\t\t\t_enabled = !!newState;\r\n\t\t\t\tScene.update(true);\r\n\t\t\t}\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Remove the scene from the controller.  \r\n\t\t * This is the equivalent to `Controller.removeScene(scene)`.\r\n\t\t * The scene will not be updated anymore until you readd it to a controller.\r\n\t\t * To remove the pin or the tween you need to call removeTween() or removePin() respectively.\r\n\t\t * @method ScrollMagic.Scene#remove\r\n\t\t * @example\r\n\t\t * // remove the scene from its controller\r\n\t\t * scene.remove();\r\n\t\t *\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.remove = function () {\r\n\t\t\tif (_controller) {\r\n\t\t\t\t_controller.info(\"container\").removeEventListener('resize', onContainerResize);\r\n\t\t\t\tvar tmpParent = _controller;\r\n\t\t\t\t_controller = undefined;\r\n\t\t\t\ttmpParent.removeScene(Scene);\r\n\t\t\t\tScene.trigger(\"remove\");\r\n\t\t\t\tlog(3, \"removed \" + NAMESPACE + \" from controller\");\r\n\t\t\t}\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Destroy the scene and everything.\r\n\t\t * @method ScrollMagic.Scene#destroy\r\n\t\t * @example\r\n\t\t * // destroy the scene without resetting the pin and tween to their initial positions\r\n\t\t * scene = scene.destroy();\r\n\t\t *\r\n\t\t * // destroy the scene and reset the pin and tween\r\n\t\t * scene = scene.destroy(true);\r\n\t\t *\r\n\t\t * @param {boolean} [reset=false] - If `true` the pin and tween (if existent) will be reset.\r\n\t\t * @returns {null} Null to unset handler variables.\r\n\t\t */\r\n\t\tthis.destroy = function (reset) {\r\n\t\t\tScene.trigger(\"destroy\", {\r\n\t\t\t\treset: reset\r\n\t\t\t});\r\n\t\t\tScene.remove();\r\n\t\t\tScene.off(\"*.*\");\r\n\t\t\tlog(3, \"destroyed \" + NAMESPACE + \" (reset: \" + (reset ? \"true\" : \"false\") + \")\");\r\n\t\t\treturn null;\r\n\t\t};\r\n\r\n\r\n\t\t/**\r\n\t\t * Updates the Scene to reflect the current state.  \r\n\t\t * This is the equivalent to `Controller.updateScene(scene, immediately)`.  \r\n\t\t * The update method calculates the scene's start and end position (based on the trigger element, trigger hook, duration and offset) and checks it against the current scroll position of the container.  \r\n\t\t * It then updates the current scene state accordingly (or does nothing, if the state is already correct) – Pins will be set to their correct position and tweens will be updated to their correct progress.\r\n\t\t * This means an update doesn't necessarily result in a progress change. The `progress` event will be fired if the progress has indeed changed between this update and the last.  \r\n\t\t * _**NOTE:** This method gets called constantly whenever ScrollMagic detects a change. The only application for you is if you change something outside of the realm of ScrollMagic, like moving the trigger or changing tween parameters._\r\n\t\t * @method ScrollMagic.Scene#update\r\n\t\t * @example\r\n\t\t * // update the scene on next tick\r\n\t\t * scene.update();\r\n\t\t *\r\n\t\t * // update the scene immediately\r\n\t\t * scene.update(true);\r\n\t\t *\r\n\t\t * @fires Scene.update\r\n\t\t *\r\n\t\t * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle (better performance).\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.update = function (immediately) {\r\n\t\t\tif (_controller) {\r\n\t\t\t\tif (immediately) {\r\n\t\t\t\t\tif (_controller.enabled() && _enabled) {\r\n\t\t\t\t\t\tvar\r\n\t\t\t\t\t\t\tscrollPos = _controller.info(\"scrollPos\"),\r\n\t\t\t\t\t\t\tnewProgress;\r\n\r\n\t\t\t\t\t\tif (_options.duration > 0) {\r\n\t\t\t\t\t\t\tnewProgress = (scrollPos - _scrollOffset.start) / (_scrollOffset.end - _scrollOffset.start);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tnewProgress = scrollPos >= _scrollOffset.start ? 1 : 0;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tScene.trigger(\"update\", {\r\n\t\t\t\t\t\t\tstartPos: _scrollOffset.start,\r\n\t\t\t\t\t\t\tendPos: _scrollOffset.end,\r\n\t\t\t\t\t\t\tscrollPos: scrollPos\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tScene.progress(newProgress);\r\n\t\t\t\t\t} else if (_pin && _state === SCENE_STATE_DURING) {\r\n\t\t\t\t\t\tupdatePinState(true); // unpin in position\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_controller.updateScene(Scene, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Updates dynamic scene variables like the trigger element position or the duration.\r\n\t\t * This method is automatically called in regular intervals from the controller. See {@link ScrollMagic.Controller} option `refreshInterval`.\r\n\t\t * \r\n\t\t * You can call it to minimize lag, for example when you intentionally change the position of the triggerElement.\r\n\t\t * If you don't it will simply be updated in the next refresh interval of the container, which is usually sufficient.\r\n\t\t *\r\n\t\t * @method ScrollMagic.Scene#refresh\r\n\t\t * @since 1.1.0\r\n\t\t * @example\r\n\t\t * scene = new ScrollMagic.Scene({triggerElement: \"#trigger\"});\r\n\t\t * \r\n\t\t * // change the position of the trigger\r\n\t\t * $(\"#trigger\").css(\"top\", 500);\r\n\t\t * // immediately let the scene know of this change\r\n\t\t * scene.refresh();\r\n\t\t *\r\n\t\t * @fires {@link Scene.shift}, if the trigger element position or the duration changed\r\n\t\t * @fires {@link Scene.change}, if the duration changed\r\n\t\t *\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.refresh = function () {\r\n\t\t\tupdateDuration();\r\n\t\t\tupdateTriggerElementPosition();\r\n\t\t\t// update trigger element position\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the scene's progress.  \r\n\t\t * Usually it shouldn't be necessary to use this as a setter, as it is set automatically by scene.update().  \r\n\t\t * The order in which the events are fired depends on the duration of the scene:\r\n\t\t *  1. Scenes with `duration == 0`:  \r\n\t\t *  Scenes that have no duration by definition have no ending. Thus the `end` event will never be fired.  \r\n\t\t *  When the trigger position of the scene is passed the events are always fired in this order:  \r\n\t\t *  `enter`, `start`, `progress` when scrolling forward  \r\n\t\t *  and  \r\n\t\t *  `progress`, `start`, `leave` when scrolling in reverse\r\n\t\t *  2. Scenes with `duration > 0`:  \r\n\t\t *  Scenes with a set duration have a defined start and end point.  \r\n\t\t *  When scrolling past the start position of the scene it will fire these events in this order:  \r\n\t\t *  `enter`, `start`, `progress`  \r\n\t\t *  When continuing to scroll and passing the end point it will fire these events:  \r\n\t\t *  `progress`, `end`, `leave`  \r\n\t\t *  When reversing through the end point these events are fired:  \r\n\t\t *  `enter`, `end`, `progress`  \r\n\t\t *  And when continuing to scroll past the start position in reverse it will fire:  \r\n\t\t *  `progress`, `start`, `leave`  \r\n\t\t *  In between start and end the `progress` event will be called constantly, whenever the progress changes.\r\n\t\t * \r\n\t\t * In short:  \r\n\t\t * `enter` events will always trigger **before** the progress update and `leave` envents will trigger **after** the progress update.  \r\n\t\t * `start` and `end` will always trigger at their respective position.\r\n\t\t * \r\n\t\t * Please review the event descriptions for details on the events and the event object that is passed to the callback.\r\n\t\t * \r\n\t\t * @method ScrollMagic.Scene#progress\r\n\t\t * @example\r\n\t\t * // get the current scene progress\r\n\t\t * var progress = scene.progress();\r\n\t\t *\r\n\t\t * // set new scene progress\r\n\t\t * scene.progress(0.3);\r\n\t\t *\r\n\t\t * @fires {@link Scene.enter}, when used as setter\r\n\t\t * @fires {@link Scene.start}, when used as setter\r\n\t\t * @fires {@link Scene.progress}, when used as setter\r\n\t\t * @fires {@link Scene.end}, when used as setter\r\n\t\t * @fires {@link Scene.leave}, when used as setter\r\n\t\t *\r\n\t\t * @param {number} [progress] - The new progress value of the scene `[0-1]`.\r\n\t\t * @returns {number} `get` -  Current scene progress.\r\n\t\t * @returns {Scene} `set` -  Parent object for chaining.\r\n\t\t */\r\n\t\tthis.progress = function (progress) {\r\n\t\t\tif (!arguments.length) { // get\r\n\t\t\t\treturn _progress;\r\n\t\t\t} else { // set\r\n\t\t\t\tvar\r\n\t\t\t\t\tdoUpdate = false,\r\n\t\t\t\t\toldState = _state,\r\n\t\t\t\t\tscrollDirection = _controller ? _controller.info(\"scrollDirection\") : 'PAUSED',\r\n\t\t\t\t\treverseOrForward = _options.reverse || progress >= _progress;\r\n\t\t\t\tif (_options.duration === 0) {\r\n\t\t\t\t\t// zero duration scenes\r\n\t\t\t\t\tdoUpdate = _progress != progress;\r\n\t\t\t\t\t_progress = progress < 1 && reverseOrForward ? 0 : 1;\r\n\t\t\t\t\t_state = _progress === 0 ? SCENE_STATE_BEFORE : SCENE_STATE_DURING;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// scenes with start and end\r\n\t\t\t\t\tif (progress < 0 && _state !== SCENE_STATE_BEFORE && reverseOrForward) {\r\n\t\t\t\t\t\t// go back to initial state\r\n\t\t\t\t\t\t_progress = 0;\r\n\t\t\t\t\t\t_state = SCENE_STATE_BEFORE;\r\n\t\t\t\t\t\tdoUpdate = true;\r\n\t\t\t\t\t} else if (progress >= 0 && progress < 1 && reverseOrForward) {\r\n\t\t\t\t\t\t_progress = progress;\r\n\t\t\t\t\t\t_state = SCENE_STATE_DURING;\r\n\t\t\t\t\t\tdoUpdate = true;\r\n\t\t\t\t\t} else if (progress >= 1 && _state !== SCENE_STATE_AFTER) {\r\n\t\t\t\t\t\t_progress = 1;\r\n\t\t\t\t\t\t_state = SCENE_STATE_AFTER;\r\n\t\t\t\t\t\tdoUpdate = true;\r\n\t\t\t\t\t} else if (_state === SCENE_STATE_DURING && !reverseOrForward) {\r\n\t\t\t\t\t\tupdatePinState(); // in case we scrolled backwards mid-scene and reverse is disabled => update the pin position, so it doesn't move back as well.\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (doUpdate) {\r\n\t\t\t\t\t// fire events\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\teventVars = {\r\n\t\t\t\t\t\t\tprogress: _progress,\r\n\t\t\t\t\t\t\tstate: _state,\r\n\t\t\t\t\t\t\tscrollDirection: scrollDirection\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tstateChanged = _state != oldState;\r\n\r\n\t\t\t\t\tvar trigger = function (eventName) { // tmp helper to simplify code\r\n\t\t\t\t\t\tScene.trigger(eventName, eventVars);\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (stateChanged) { // enter events\r\n\t\t\t\t\t\tif (oldState !== SCENE_STATE_DURING) {\r\n\t\t\t\t\t\t\ttrigger(\"enter\");\r\n\t\t\t\t\t\t\ttrigger(oldState === SCENE_STATE_BEFORE ? \"start\" : \"end\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttrigger(\"progress\");\r\n\t\t\t\t\tif (stateChanged) { // leave events\r\n\t\t\t\t\t\tif (_state !== SCENE_STATE_DURING) {\r\n\t\t\t\t\t\t\ttrigger(_state === SCENE_STATE_BEFORE ? \"start\" : \"end\");\r\n\t\t\t\t\t\t\ttrigger(\"leave\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn Scene;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\t/**\r\n\t\t * Update the start and end scrollOffset of the container.\r\n\t\t * The positions reflect what the controller's scroll position will be at the start and end respectively.\r\n\t\t * Is called, when:\r\n\t\t *   - Scene event \"change\" is called with: offset, triggerHook, duration \r\n\t\t *   - scroll container event \"resize\" is called\r\n\t\t *   - the position of the triggerElement changes\r\n\t\t *   - the controller changes -> addTo()\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updateScrollOffset = function () {\r\n\t\t\t_scrollOffset = {\r\n\t\t\t\tstart: _triggerPos + _options.offset\r\n\t\t\t};\r\n\t\t\tif (_controller && _options.triggerElement) {\r\n\t\t\t\t// take away triggerHook portion to get relative to top\r\n\t\t\t\t_scrollOffset.start -= _controller.info(\"size\") * _options.triggerHook;\r\n\t\t\t}\r\n\t\t\t_scrollOffset.end = _scrollOffset.start + _options.duration;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Updates the duration if set to a dynamic function.\r\n\t\t * This method is called when the scene is added to a controller and in regular intervals from the controller through scene.refresh().\r\n\t\t * \r\n\t\t * @fires {@link Scene.change}, if the duration changed\r\n\t\t * @fires {@link Scene.shift}, if the duration changed\r\n\t\t *\r\n\t\t * @param {boolean} [suppressEvents=false] - If true the shift event will be suppressed.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updateDuration = function (suppressEvents) {\r\n\t\t\t// update duration\r\n\t\t\tif (_durationUpdateMethod) {\r\n\t\t\t\tvar varname = \"duration\";\r\n\t\t\t\tif (changeOption(varname, _durationUpdateMethod.call(Scene)) && !suppressEvents) { // set\r\n\t\t\t\t\tScene.trigger(\"change\", {\r\n\t\t\t\t\t\twhat: varname,\r\n\t\t\t\t\t\tnewval: _options[varname]\r\n\t\t\t\t\t});\r\n\t\t\t\t\tScene.trigger(\"shift\", {\r\n\t\t\t\t\t\treason: varname\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Updates the position of the triggerElement, if present.\r\n\t\t * This method is called ...\r\n\t\t *  - ... when the triggerElement is changed\r\n\t\t *  - ... when the scene is added to a (new) controller\r\n\t\t *  - ... in regular intervals from the controller through scene.refresh().\r\n\t\t * \r\n\t\t * @fires {@link Scene.shift}, if the position changed\r\n\t\t *\r\n\t\t * @param {boolean} [suppressEvents=false] - If true the shift event will be suppressed.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updateTriggerElementPosition = function (suppressEvents) {\r\n\t\t\tvar\r\n\t\t\t\telementPos = 0,\r\n\t\t\t\ttelem = _options.triggerElement;\r\n\t\t\tif (_controller && (telem || _triggerPos > 0)) { // either an element exists or was removed and the triggerPos is still > 0\r\n\t\t\t\tif (telem) { // there currently a triggerElement set\r\n\t\t\t\t\tif (telem.parentNode) { // check if element is still attached to DOM\r\n\t\t\t\t\t\tvar\r\n\t\t\t\t\t\t\tcontrollerInfo = _controller.info(),\r\n\t\t\t\t\t\t\tcontainerOffset = _util.get.offset(controllerInfo.container), // container position is needed because element offset is returned in relation to document, not in relation to container.\r\n\t\t\t\t\t\t\tparam = controllerInfo.vertical ? \"top\" : \"left\"; // which param is of interest ?\r\n\r\n\t\t\t\t\t\t// if parent is spacer, use spacer position instead so correct start position is returned for pinned elements.\r\n\t\t\t\t\t\twhile (telem.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) {\r\n\t\t\t\t\t\t\ttelem = telem.parentNode;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar elementOffset = _util.get.offset(telem);\r\n\r\n\t\t\t\t\t\tif (!controllerInfo.isDocument) { // container is not the document root, so substract scroll Position to get correct trigger element position relative to scrollcontent\r\n\t\t\t\t\t\t\tcontainerOffset[param] -= _controller.scrollPos();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\telementPos = elementOffset[param] - containerOffset[param];\r\n\r\n\t\t\t\t\t} else { // there was an element, but it was removed from DOM\r\n\t\t\t\t\t\tlog(2, \"WARNING: triggerElement was removed from DOM and will be reset to\", undefined);\r\n\t\t\t\t\t\tScene.triggerElement(undefined); // unset, so a change event is triggered\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar changed = elementPos != _triggerPos;\r\n\t\t\t\t_triggerPos = elementPos;\r\n\t\t\t\tif (changed && !suppressEvents) {\r\n\t\t\t\t\tScene.trigger(\"shift\", {\r\n\t\t\t\t\t\treason: \"triggerElementPosition\"\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Trigger a shift event, when the container is resized and the triggerHook is > 1.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar onContainerResize = function (e) {\r\n\t\t\tif (_options.triggerHook > 0) {\r\n\t\t\t\tScene.trigger(\"shift\", {\r\n\t\t\t\t\treason: \"containerResize\"\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\r\n\t\tvar _validate = _util.extend(SCENE_OPTIONS.validate, {\r\n\t\t\t// validation for duration handled internally for reference to private var _durationMethod\r\n\t\t\tduration: function (val) {\r\n\t\t\t\tif (_util.type.String(val) && val.match(/^(\\.|\\d)*\\d+%$/)) {\r\n\t\t\t\t\t// percentage value\r\n\t\t\t\t\tvar perc = parseFloat(val) / 100;\r\n\t\t\t\t\tval = function () {\r\n\t\t\t\t\t\treturn _controller ? _controller.info(\"size\") * perc : 0;\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tif (_util.type.Function(val)) {\r\n\t\t\t\t\t// function\r\n\t\t\t\t\t_durationUpdateMethod = val;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tval = parseFloat(_durationUpdateMethod.call(Scene));\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tval = -1; // will cause error below\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// val has to be float\r\n\t\t\t\tval = parseFloat(val);\r\n\t\t\t\tif (!_util.type.Number(val) || val < 0) {\r\n\t\t\t\t\tif (_durationUpdateMethod) {\r\n\t\t\t\t\t\t_durationUpdateMethod = undefined;\r\n\t\t\t\t\t\tthrow [\"Invalid return value of supplied function for option \\\"duration\\\":\", val];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow [\"Invalid value for option \\\"duration\\\":\", val];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn val;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Checks the validity of a specific or all options and reset to default if neccessary.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar validateOption = function (check) {\r\n\t\t\tcheck = arguments.length ? [check] : Object.keys(_validate);\r\n\t\t\tcheck.forEach(function (optionName, key) {\r\n\t\t\t\tvar value;\r\n\t\t\t\tif (_validate[optionName]) { // there is a validation method for this option\r\n\t\t\t\t\ttry { // validate value\r\n\t\t\t\t\t\tvalue = _validate[optionName](_options[optionName]);\r\n\t\t\t\t\t} catch (e) { // validation failed -> reset to default\r\n\t\t\t\t\t\tvalue = DEFAULT_OPTIONS[optionName];\r\n\t\t\t\t\t\tvar logMSG = _util.type.String(e) ? [e] : e;\r\n\t\t\t\t\t\tif (_util.type.Array(logMSG)) {\r\n\t\t\t\t\t\t\tlogMSG[0] = \"ERROR: \" + logMSG[0];\r\n\t\t\t\t\t\t\tlogMSG.unshift(1); // loglevel 1 for error msg\r\n\t\t\t\t\t\t\tlog.apply(this, logMSG);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlog(1, \"ERROR: Problem executing validation callback for option '\" + optionName + \"':\", e.message);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} finally {\r\n\t\t\t\t\t\t_options[optionName] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Helper used by the setter/getters for scene options\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar changeOption = function (varname, newval) {\r\n\t\t\tvar\r\n\t\t\t\tchanged = false,\r\n\t\t\t\toldval = _options[varname];\r\n\t\t\tif (_options[varname] != newval) {\r\n\t\t\t\t_options[varname] = newval;\r\n\t\t\t\tvalidateOption(varname); // resets to default if necessary\r\n\t\t\t\tchanged = oldval != _options[varname];\r\n\t\t\t}\r\n\t\t\treturn changed;\r\n\t\t};\r\n\r\n\t\t// generate getters/setters for all options\r\n\t\tvar addSceneOption = function (optionName) {\r\n\t\t\tif (!Scene[optionName]) {\r\n\t\t\t\tScene[optionName] = function (newVal) {\r\n\t\t\t\t\tif (!arguments.length) { // get\r\n\t\t\t\t\t\treturn _options[optionName];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (optionName === \"duration\") { // new duration is set, so any previously set function must be unset\r\n\t\t\t\t\t\t\t_durationUpdateMethod = undefined;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (changeOption(optionName, newVal)) { // set\r\n\t\t\t\t\t\t\tScene.trigger(\"change\", {\r\n\t\t\t\t\t\t\t\twhat: optionName,\r\n\t\t\t\t\t\t\t\tnewval: _options[optionName]\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tif (SCENE_OPTIONS.shifts.indexOf(optionName) > -1) {\r\n\t\t\t\t\t\t\t\tScene.trigger(\"shift\", {\r\n\t\t\t\t\t\t\t\t\treason: optionName\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn Scene;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the duration option value.\r\n\t\t *\r\n\t\t * As a **setter** it accepts three types of parameters:\r\n\t\t * 1. `number`: Sets the duration of the scene to exactly this amount of pixels.  \r\n\t\t *   This means the scene will last for exactly this amount of pixels scrolled. Sub-Pixels are also valid.\r\n\t\t *   A value of `0` means that the scene is 'open end' and no end will be triggered. Pins will never unpin and animations will play independently of scroll progress.\r\n\t\t * 2. `string`: Always updates the duration relative to parent scroll container.  \r\n\t\t *   For example `\"100%\"` will keep the duration always exactly at the inner height of the scroll container.\r\n\t\t *   When scrolling vertically the width is used for reference respectively.\r\n\t\t * 3. `function`: The supplied function will be called to return the scene duration.\r\n\t\t *   This is useful in setups where the duration depends on other elements who might change size. By supplying a function you can return a value instead of updating potentially multiple scene durations.  \r\n\t\t *   The scene can be referenced inside the callback using `this`.\r\n\t\t *   _**WARNING:** This is an easy way to kill performance, as the callback will be executed every time `Scene.refresh()` is called, which happens a lot. The interval is defined by the controller (see ScrollMagic.Controller option `refreshInterval`).  \r\n\t\t *   It's recomended to avoid calculations within the function and use cached variables as return values.  \r\n\t\t *   This counts double if you use the same function for multiple scenes._\r\n\t\t *\r\n\t\t * @method ScrollMagic.Scene#duration\r\n\t\t * @example\r\n\t\t * // get the current duration value\r\n\t\t * var duration = scene.duration();\r\n\t\t *\r\n\t\t * // set a new duration\r\n\t\t * scene.duration(300);\r\n\t\t *\r\n\t\t * // set duration responsively to container size\r\n\t\t * scene.duration(\"100%\");\r\n\t\t *\r\n\t\t * // use a function to randomize the duration for some reason.\r\n\t\t * var durationValueCache;\r\n\t\t * function durationCallback () {\r\n\t\t *   return durationValueCache;\r\n\t\t * }\r\n\t\t * function updateDuration () {\r\n\t\t *   durationValueCache = Math.random() * 100;\r\n\t\t * }\r\n\t\t * updateDuration(); // set to initial value\r\n\t\t * scene.duration(durationCallback); // set duration callback\r\n\t\t *\r\n\t\t * @fires {@link Scene.change}, when used as setter\r\n\t\t * @fires {@link Scene.shift}, when used as setter\r\n\t\t * @param {(number|string|function)} [newDuration] - The new duration setting for the scene.\r\n\t\t * @returns {number} `get` -  Current scene duration.\r\n\t\t * @returns {Scene} `set` -  Parent object for chaining.\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the offset option value.\r\n\t\t * @method ScrollMagic.Scene#offset\r\n\t\t * @example\r\n\t\t * // get the current offset\r\n\t\t * var offset = scene.offset();\r\n\t\t *\r\n\t\t * // set a new offset\r\n\t\t * scene.offset(100);\r\n\t\t *\r\n\t\t * @fires {@link Scene.change}, when used as setter\r\n\t\t * @fires {@link Scene.shift}, when used as setter\r\n\t\t * @param {number} [newOffset] - The new offset of the scene.\r\n\t\t * @returns {number} `get` -  Current scene offset.\r\n\t\t * @returns {Scene} `set` -  Parent object for chaining.\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the triggerElement option value.\r\n\t\t * Does **not** fire `Scene.shift`, because changing the trigger Element doesn't necessarily mean the start position changes. This will be determined in `Scene.refresh()`, which is automatically triggered.\r\n\t\t * @method ScrollMagic.Scene#triggerElement\r\n\t\t * @example\r\n\t\t * // get the current triggerElement\r\n\t\t * var triggerElement = scene.triggerElement();\r\n\t\t *\r\n\t\t * // set a new triggerElement using a selector\r\n\t\t * scene.triggerElement(\"#trigger\");\r\n\t\t * // set a new triggerElement using a DOM object\r\n\t\t * scene.triggerElement(document.getElementById(\"trigger\"));\r\n\t\t *\r\n\t\t * @fires {@link Scene.change}, when used as setter\r\n\t\t * @param {(string|object)} [newTriggerElement] - The new trigger element for the scene.\r\n\t\t * @returns {(string|object)} `get` -  Current triggerElement.\r\n\t\t * @returns {Scene} `set` -  Parent object for chaining.\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the triggerHook option value.\r\n\t\t * @method ScrollMagic.Scene#triggerHook\r\n\t\t * @example\r\n\t\t * // get the current triggerHook value\r\n\t\t * var triggerHook = scene.triggerHook();\r\n\t\t *\r\n\t\t * // set a new triggerHook using a string\r\n\t\t * scene.triggerHook(\"onLeave\");\r\n\t\t * // set a new triggerHook using a number\r\n\t\t * scene.triggerHook(0.7);\r\n\t\t *\r\n\t\t * @fires {@link Scene.change}, when used as setter\r\n\t\t * @fires {@link Scene.shift}, when used as setter\r\n\t\t * @param {(number|string)} [newTriggerHook] - The new triggerHook of the scene. See {@link Scene} parameter description for value options.\r\n\t\t * @returns {number} `get` -  Current triggerHook (ALWAYS numerical).\r\n\t\t * @returns {Scene} `set` -  Parent object for chaining.\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the reverse option value.\r\n\t\t * @method ScrollMagic.Scene#reverse\r\n\t\t * @example\r\n\t\t * // get the current reverse option\r\n\t\t * var reverse = scene.reverse();\r\n\t\t *\r\n\t\t * // set new reverse option\r\n\t\t * scene.reverse(false);\r\n\t\t *\r\n\t\t * @fires {@link Scene.change}, when used as setter\r\n\t\t * @param {boolean} [newReverse] - The new reverse setting of the scene.\r\n\t\t * @returns {boolean} `get` -  Current reverse option value.\r\n\t\t * @returns {Scene} `set` -  Parent object for chaining.\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * **Get** or **Set** the loglevel option value.\r\n\t\t * @method ScrollMagic.Scene#loglevel\r\n\t\t * @example\r\n\t\t * // get the current loglevel\r\n\t\t * var loglevel = scene.loglevel();\r\n\t\t *\r\n\t\t * // set new loglevel\r\n\t\t * scene.loglevel(3);\r\n\t\t *\r\n\t\t * @fires {@link Scene.change}, when used as setter\r\n\t\t * @param {number} [newLoglevel] - The new loglevel setting of the scene. `[0-3]`\r\n\t\t * @returns {number} `get` -  Current loglevel.\r\n\t\t * @returns {Scene} `set` -  Parent object for chaining.\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * **Get** the associated controller.\r\n\t\t * @method ScrollMagic.Scene#controller\r\n\t\t * @example\r\n\t\t * // get the controller of a scene\r\n\t\t * var controller = scene.controller();\r\n\t\t *\r\n\t\t * @returns {ScrollMagic.Controller} Parent controller or `undefined`\r\n\t\t */\r\n\t\tthis.controller = function () {\r\n\t\t\treturn _controller;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** the current state.\r\n\t\t * @method ScrollMagic.Scene#state\r\n\t\t * @example\r\n\t\t * // get the current state\r\n\t\t * var state = scene.state();\r\n\t\t *\r\n\t\t * @returns {string} `\"BEFORE\"`, `\"DURING\"` or `\"AFTER\"`\r\n\t\t */\r\n\t\tthis.state = function () {\r\n\t\t\treturn _state;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** the current scroll offset for the start of the scene.  \r\n\t\t * Mind, that the scrollOffset is related to the size of the container, if `triggerHook` is bigger than `0` (or `\"onLeave\"`).  \r\n\t\t * This means, that resizing the container or changing the `triggerHook` will influence the scene's start offset.\r\n\t\t * @method ScrollMagic.Scene#scrollOffset\r\n\t\t * @example\r\n\t\t * // get the current scroll offset for the start and end of the scene.\r\n\t\t * var start = scene.scrollOffset();\r\n\t\t * var end = scene.scrollOffset() + scene.duration();\r\n\t\t * console.log(\"the scene starts at\", start, \"and ends at\", end);\r\n\t\t *\r\n\t\t * @returns {number} The scroll offset (of the container) at which the scene will trigger. Y value for vertical and X value for horizontal scrolls.\r\n\t\t */\r\n\t\tthis.scrollOffset = function () {\r\n\t\t\treturn _scrollOffset.start;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * **Get** the trigger position of the scene (including the value of the `offset` option).  \r\n\t\t * @method ScrollMagic.Scene#triggerPosition\r\n\t\t * @example\r\n\t\t * // get the scene's trigger position\r\n\t\t * var triggerPosition = scene.triggerPosition();\r\n\t\t *\r\n\t\t * @returns {number} Start position of the scene. Top position value for vertical and left position value for horizontal scrolls.\r\n\t\t */\r\n\t\tthis.triggerPosition = function () {\r\n\t\t\tvar pos = _options.offset; // the offset is the basis\r\n\t\t\tif (_controller) {\r\n\t\t\t\t// get the trigger position\r\n\t\t\t\tif (_options.triggerElement) {\r\n\t\t\t\t\t// Element as trigger\r\n\t\t\t\t\tpos += _triggerPos;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// return the height of the triggerHook to start at the beginning\r\n\t\t\t\t\tpos += _controller.info(\"size\") * Scene.triggerHook();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn pos;\r\n\t\t};\r\n\r\n\r\n\t\tvar\r\n\t\t\t_pin,\r\n\t\t\t_pinOptions;\r\n\r\n\t\tScene\r\n\t\t\t.on(\"shift.internal\", function (e) {\r\n\t\t\t\tvar durationChanged = e.reason === \"duration\";\r\n\t\t\t\tif ((_state === SCENE_STATE_AFTER && durationChanged) || (_state === SCENE_STATE_DURING && _options.duration === 0)) {\r\n\t\t\t\t\t// if [duration changed after a scene (inside scene progress updates pin position)] or [duration is 0, we are in pin phase and some other value changed].\r\n\t\t\t\t\tupdatePinState();\r\n\t\t\t\t}\r\n\t\t\t\tif (durationChanged) {\r\n\t\t\t\t\tupdatePinDimensions();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on(\"progress.internal\", function (e) {\r\n\t\t\t\tupdatePinState();\r\n\t\t\t})\r\n\t\t\t.on(\"add.internal\", function (e) {\r\n\t\t\t\tupdatePinDimensions();\r\n\t\t\t})\r\n\t\t\t.on(\"destroy.internal\", function (e) {\r\n\t\t\t\tScene.removePin(e.reset);\r\n\t\t\t});\r\n\t\t/**\r\n\t\t * Update the pin state.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updatePinState = function (forceUnpin) {\r\n\t\t\tif (_pin && _controller) {\r\n\t\t\t\tvar\r\n\t\t\t\t\tcontainerInfo = _controller.info(),\r\n\t\t\t\t\tpinTarget = _pinOptions.spacer.firstChild; // may be pin element or another spacer, if cascading pins\r\n\r\n\t\t\t\tif (!forceUnpin && _state === SCENE_STATE_DURING) { // during scene or if duration is 0 and we are past the trigger\r\n\t\t\t\t\t// pinned state\r\n\t\t\t\t\tif (_util.css(pinTarget, \"position\") != \"fixed\") {\r\n\t\t\t\t\t\t// change state before updating pin spacer (position changes due to fixed collapsing might occur.)\r\n\t\t\t\t\t\t_util.css(pinTarget, {\r\n\t\t\t\t\t\t\t\"position\": \"fixed\"\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t// update pin spacer\r\n\t\t\t\t\t\tupdatePinDimensions();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tfixedPos = _util.get.offset(_pinOptions.spacer, true), // get viewport position of spacer\r\n\t\t\t\t\t\tscrollDistance = _options.reverse || _options.duration === 0 ?\r\n\t\t\t\t\t\tcontainerInfo.scrollPos - _scrollOffset.start // quicker\r\n\t\t\t\t\t\t:\r\n\t\t\t\t\t\tMath.round(_progress * _options.duration * 10) / 10; // if no reverse and during pin the position needs to be recalculated using the progress\r\n\r\n\t\t\t\t\t// add scrollDistance\r\n\t\t\t\t\tfixedPos[containerInfo.vertical ? \"top\" : \"left\"] += scrollDistance;\r\n\r\n\t\t\t\t\t// set new values\r\n\t\t\t\t\t_util.css(_pinOptions.spacer.firstChild, {\r\n\t\t\t\t\t\ttop: fixedPos.top,\r\n\t\t\t\t\t\tleft: fixedPos.left\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// unpinned state\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tnewCSS = {\r\n\t\t\t\t\t\t\tposition: _pinOptions.inFlow ? \"relative\" : \"absolute\",\r\n\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\tleft: 0\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tchange = _util.css(pinTarget, \"position\") != newCSS.position;\r\n\r\n\t\t\t\t\tif (!_pinOptions.pushFollowers) {\r\n\t\t\t\t\t\tnewCSS[containerInfo.vertical ? \"top\" : \"left\"] = _options.duration * _progress;\r\n\t\t\t\t\t} else if (_options.duration > 0) { // only concerns scenes with duration\r\n\t\t\t\t\t\tif (_state === SCENE_STATE_AFTER && parseFloat(_util.css(_pinOptions.spacer, \"padding-top\")) === 0) {\r\n\t\t\t\t\t\t\tchange = true; // if in after state but havent updated spacer yet (jumped past pin)\r\n\t\t\t\t\t\t} else if (_state === SCENE_STATE_BEFORE && parseFloat(_util.css(_pinOptions.spacer, \"padding-bottom\")) === 0) { // before\r\n\t\t\t\t\t\t\tchange = true; // jumped past fixed state upward direction\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// set new values\r\n\t\t\t\t\t_util.css(pinTarget, newCSS);\r\n\t\t\t\t\tif (change) {\r\n\t\t\t\t\t\t// update pin spacer if state changed\r\n\t\t\t\t\t\tupdatePinDimensions();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Update the pin spacer and/or element size.\r\n\t\t * The size of the spacer needs to be updated whenever the duration of the scene changes, if it is to push down following elements.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updatePinDimensions = function () {\r\n\t\t\tif (_pin && _controller && _pinOptions.inFlow) { // no spacerresize, if original position is absolute\r\n\t\t\t\tvar\r\n\t\t\t\t\tafter = (_state === SCENE_STATE_AFTER),\r\n\t\t\t\t\tbefore = (_state === SCENE_STATE_BEFORE),\r\n\t\t\t\t\tduring = (_state === SCENE_STATE_DURING),\r\n\t\t\t\t\tvertical = _controller.info(\"vertical\"),\r\n\t\t\t\t\tpinTarget = _pinOptions.spacer.firstChild, // usually the pined element but can also be another spacer (cascaded pins)\r\n\t\t\t\t\tmarginCollapse = _util.isMarginCollapseType(_util.css(_pinOptions.spacer, \"display\")),\r\n\t\t\t\t\tcss = {};\r\n\r\n\t\t\t\t// set new size\r\n\t\t\t\t// if relsize: spacer -> pin | else: pin -> spacer\r\n\t\t\t\tif (_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) {\r\n\t\t\t\t\tif (during) {\r\n\t\t\t\t\t\t_util.css(_pin, {\r\n\t\t\t\t\t\t\t\"width\": _util.get.width(_pinOptions.spacer)\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_util.css(_pin, {\r\n\t\t\t\t\t\t\t\"width\": \"100%\"\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// minwidth is needed for cascaded pins.\r\n\t\t\t\t\tcss[\"min-width\"] = _util.get.width(vertical ? _pin : pinTarget, true, true);\r\n\t\t\t\t\tcss.width = during ? css[\"min-width\"] : \"auto\";\r\n\t\t\t\t}\r\n\t\t\t\tif (_pinOptions.relSize.height) {\r\n\t\t\t\t\tif (during) {\r\n\t\t\t\t\t\t// the only padding the spacer should ever include is the duration (if pushFollowers = true), so we need to substract that.\r\n\t\t\t\t\t\t_util.css(_pin, {\r\n\t\t\t\t\t\t\t\"height\": _util.get.height(_pinOptions.spacer) - (_pinOptions.pushFollowers ? _options.duration : 0)\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_util.css(_pin, {\r\n\t\t\t\t\t\t\t\"height\": \"100%\"\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// margin is only included if it's a cascaded pin to resolve an IE9 bug\r\n\t\t\t\t\tcss[\"min-height\"] = _util.get.height(vertical ? pinTarget : _pin, true, !marginCollapse); // needed for cascading pins\r\n\t\t\t\t\tcss.height = during ? css[\"min-height\"] : \"auto\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// add space for duration if pushFollowers is true\r\n\t\t\t\tif (_pinOptions.pushFollowers) {\r\n\t\t\t\t\tcss[\"padding\" + (vertical ? \"Top\" : \"Left\")] = _options.duration * _progress;\r\n\t\t\t\t\tcss[\"padding\" + (vertical ? \"Bottom\" : \"Right\")] = _options.duration * (1 - _progress);\r\n\t\t\t\t}\r\n\t\t\t\t_util.css(_pinOptions.spacer, css);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Updates the Pin state (in certain scenarios)\r\n\t\t * If the controller container is not the document and we are mid-pin-phase scrolling or resizing the main document can result to wrong pin positions.\r\n\t\t * So this function is called on resize and scroll of the document.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updatePinInContainer = function () {\r\n\t\t\tif (_controller && _pin && _state === SCENE_STATE_DURING && !_controller.info(\"isDocument\")) {\r\n\t\t\t\tupdatePinState();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Updates the Pin spacer size state (in certain scenarios)\r\n\t\t * If container is resized during pin and relatively sized the size of the pin might need to be updated...\r\n\t\t * So this function is called on resize of the container.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar updateRelativePinSpacer = function () {\r\n\t\t\tif (_controller && _pin && // well, duh\r\n\t\t\t\t_state === SCENE_STATE_DURING && // element in pinned state?\r\n\t\t\t\t( // is width or height relatively sized, but not in relation to body? then we need to recalc.\r\n\t\t\t\t\t((_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) && _util.get.width(window) != _util.get.width(_pinOptions.spacer.parentNode)) ||\r\n\t\t\t\t\t(_pinOptions.relSize.height && _util.get.height(window) != _util.get.height(_pinOptions.spacer.parentNode))\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tupdatePinDimensions();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Is called, when the mousewhel is used while over a pinned element inside a div container.\r\n\t\t * If the scene is in fixed state scroll events would be counted towards the body. This forwards the event to the scroll container.\r\n\t\t * @private\r\n\t\t */\r\n\t\tvar onMousewheelOverPin = function (e) {\r\n\t\t\tif (_controller && _pin && _state === SCENE_STATE_DURING && !_controller.info(\"isDocument\")) { // in pin state\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\t_controller._setScrollPos(_controller.info(\"scrollPos\") - ((e.wheelDelta || e[_controller.info(\"vertical\") ? \"wheelDeltaY\" : \"wheelDeltaX\"]) / 3 || -e.detail * 30));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Pin an element for the duration of the scene.\r\n\t\t * If the scene duration is 0 the element will only be unpinned, if the user scrolls back past the start position.  \r\n\t\t * Make sure only one pin is applied to an element at the same time.\r\n\t\t * An element can be pinned multiple times, but only successively.\r\n\t\t * _**NOTE:** The option `pushFollowers` has no effect, when the scene duration is 0._\r\n\t\t * @method ScrollMagic.Scene#setPin\r\n\t\t * @example\r\n\t\t * // pin element and push all following elements down by the amount of the pin duration.\r\n\t\t * scene.setPin(\"#pin\");\r\n\t\t *\r\n\t\t * // pin element and keeping all following elements in their place. The pinned element will move past them.\r\n\t\t * scene.setPin(\"#pin\", {pushFollowers: false});\r\n\t\t *\r\n\t\t * @param {(string|object)} element - A Selector targeting an element or a DOM object that is supposed to be pinned.\r\n\t\t * @param {object} [settings] - settings for the pin\r\n\t\t * @param {boolean} [settings.pushFollowers=true] - If `true` following elements will be \"pushed\" down for the duration of the pin, if `false` the pinned element will just scroll past them.  \r\n\t\t \t\t\t\t\t\t\t\t\t\t\t\t   Ignored, when duration is `0`.\r\n\t\t * @param {string} [settings.spacerClass=\"scrollmagic-pin-spacer\"] - Classname of the pin spacer element, which is used to replace the element.\r\n\t\t *\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.setPin = function (element, settings) {\r\n\t\t\tvar\r\n\t\t\t\tdefaultSettings = {\r\n\t\t\t\t\tpushFollowers: true,\r\n\t\t\t\t\tspacerClass: \"scrollmagic-pin-spacer\"\r\n\t\t\t\t};\r\n\t\t\tvar pushFollowersActivelySet = settings && settings.hasOwnProperty('pushFollowers');\r\n\t\t\tsettings = _util.extend({}, defaultSettings, settings);\r\n\r\n\t\t\t// validate Element\r\n\t\t\telement = _util.get.elements(element)[0];\r\n\t\t\tif (!element) {\r\n\t\t\t\tlog(1, \"ERROR calling method 'setPin()': Invalid pin element supplied.\");\r\n\t\t\t\treturn Scene; // cancel\r\n\t\t\t} else if (_util.css(element, \"position\") === \"fixed\") {\r\n\t\t\t\tlog(1, \"ERROR calling method 'setPin()': Pin does not work with elements that are positioned 'fixed'.\");\r\n\t\t\t\treturn Scene; // cancel\r\n\t\t\t}\r\n\r\n\t\t\tif (_pin) { // preexisting pin?\r\n\t\t\t\tif (_pin === element) {\r\n\t\t\t\t\t// same pin we already have -> do nothing\r\n\t\t\t\t\treturn Scene; // cancel\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// kill old pin\r\n\t\t\t\t\tScene.removePin();\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\t_pin = element;\r\n\r\n\t\t\tvar\r\n\t\t\t\tparentDisplay = _pin.parentNode.style.display,\r\n\t\t\t\tboundsParams = [\"top\", \"left\", \"bottom\", \"right\", \"margin\", \"marginLeft\", \"marginRight\", \"marginTop\", \"marginBottom\"];\r\n\r\n\t\t\t_pin.parentNode.style.display = 'none'; // hack start to force css to return stylesheet values instead of calculated px values.\r\n\t\t\tvar\r\n\t\t\t\tinFlow = _util.css(_pin, \"position\") != \"absolute\",\r\n\t\t\t\tpinCSS = _util.css(_pin, boundsParams.concat([\"display\"])),\r\n\t\t\t\tsizeCSS = _util.css(_pin, [\"width\", \"height\"]);\r\n\t\t\t_pin.parentNode.style.display = parentDisplay; // hack end.\r\n\r\n\t\t\tif (!inFlow && settings.pushFollowers) {\r\n\t\t\t\tlog(2, \"WARNING: If the pinned element is positioned absolutely pushFollowers will be disabled.\");\r\n\t\t\t\tsettings.pushFollowers = false;\r\n\t\t\t}\r\n\t\t\twindow.setTimeout(function () { // wait until all finished, because with responsive duration it will only be set after scene is added to controller\r\n\t\t\t\tif (_pin && _options.duration === 0 && pushFollowersActivelySet && settings.pushFollowers) {\r\n\t\t\t\t\tlog(2, \"WARNING: pushFollowers =\", true, \"has no effect, when scene duration is 0.\");\r\n\t\t\t\t}\r\n\t\t\t}, 0);\r\n\r\n\t\t\t// create spacer and insert\r\n\t\t\tvar\r\n\t\t\t\tspacer = _pin.parentNode.insertBefore(document.createElement('div'), _pin),\r\n\t\t\t\tspacerCSS = _util.extend(pinCSS, {\r\n\t\t\t\t\tposition: inFlow ? \"relative\" : \"absolute\",\r\n\t\t\t\t\tboxSizing: \"content-box\",\r\n\t\t\t\t\tmozBoxSizing: \"content-box\",\r\n\t\t\t\t\twebkitBoxSizing: \"content-box\"\r\n\t\t\t\t});\r\n\r\n\t\t\tif (!inFlow) { // copy size if positioned absolutely, to work for bottom/right positioned elements.\r\n\t\t\t\t_util.extend(spacerCSS, _util.css(_pin, [\"width\", \"height\"]));\r\n\t\t\t}\r\n\r\n\t\t\t_util.css(spacer, spacerCSS);\r\n\t\t\tspacer.setAttribute(PIN_SPACER_ATTRIBUTE, \"\");\r\n\t\t\t_util.addClass(spacer, settings.spacerClass);\r\n\r\n\t\t\t// set the pin Options\r\n\t\t\t_pinOptions = {\r\n\t\t\t\tspacer: spacer,\r\n\t\t\t\trelSize: { // save if size is defined using % values. if so, handle spacer resize differently...\r\n\t\t\t\t\twidth: sizeCSS.width.slice(-1) === \"%\",\r\n\t\t\t\t\theight: sizeCSS.height.slice(-1) === \"%\",\r\n\t\t\t\t\tautoFullWidth: sizeCSS.width === \"auto\" && inFlow && _util.isMarginCollapseType(pinCSS.display)\r\n\t\t\t\t},\r\n\t\t\t\tpushFollowers: settings.pushFollowers,\r\n\t\t\t\tinFlow: inFlow, // stores if the element takes up space in the document flow\r\n\t\t\t};\r\n\r\n\t\t\tif (!_pin.___origStyle) {\r\n\t\t\t\t_pin.___origStyle = {};\r\n\t\t\t\tvar\r\n\t\t\t\t\tpinInlineCSS = _pin.style,\r\n\t\t\t\t\tcopyStyles = boundsParams.concat([\"width\", \"height\", \"position\", \"boxSizing\", \"mozBoxSizing\", \"webkitBoxSizing\"]);\r\n\t\t\t\tcopyStyles.forEach(function (val) {\r\n\t\t\t\t\t_pin.___origStyle[val] = pinInlineCSS[val] || \"\";\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// if relative size, transfer it to spacer and make pin calculate it...\r\n\t\t\tif (_pinOptions.relSize.width) {\r\n\t\t\t\t_util.css(spacer, {\r\n\t\t\t\t\twidth: sizeCSS.width\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (_pinOptions.relSize.height) {\r\n\t\t\t\t_util.css(spacer, {\r\n\t\t\t\t\theight: sizeCSS.height\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// now place the pin element inside the spacer\t\r\n\t\t\tspacer.appendChild(_pin);\r\n\t\t\t// and set new css\r\n\t\t\t_util.css(_pin, {\r\n\t\t\t\tposition: inFlow ? \"relative\" : \"absolute\",\r\n\t\t\t\tmargin: \"auto\",\r\n\t\t\t\ttop: \"auto\",\r\n\t\t\t\tleft: \"auto\",\r\n\t\t\t\tbottom: \"auto\",\r\n\t\t\t\tright: \"auto\"\r\n\t\t\t});\r\n\r\n\t\t\tif (_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) {\r\n\t\t\t\t_util.css(_pin, {\r\n\t\t\t\t\tboxSizing: \"border-box\",\r\n\t\t\t\t\tmozBoxSizing: \"border-box\",\r\n\t\t\t\t\twebkitBoxSizing: \"border-box\"\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// add listener to document to update pin position in case controller is not the document.\r\n\t\t\twindow.addEventListener('scroll', updatePinInContainer);\r\n\t\t\twindow.addEventListener('resize', updatePinInContainer);\r\n\t\t\twindow.addEventListener('resize', updateRelativePinSpacer);\r\n\t\t\t// add mousewheel listener to catch scrolls over fixed elements\r\n\t\t\t_pin.addEventListener(\"mousewheel\", onMousewheelOverPin);\r\n\t\t\t_pin.addEventListener(\"DOMMouseScroll\", onMousewheelOverPin);\r\n\r\n\t\t\tlog(3, \"added pin\");\r\n\r\n\t\t\t// finally update the pin to init\r\n\t\t\tupdatePinState();\r\n\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Remove the pin from the scene.\r\n\t\t * @method ScrollMagic.Scene#removePin\r\n\t\t * @example\r\n\t\t * // remove the pin from the scene without resetting it (the spacer is not removed)\r\n\t\t * scene.removePin();\r\n\t\t *\r\n\t\t * // remove the pin from the scene and reset the pin element to its initial position (spacer is removed)\r\n\t\t * scene.removePin(true);\r\n\t\t *\r\n\t\t * @param {boolean} [reset=false] - If `false` the spacer will not be removed and the element's position will not be reset.\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.removePin = function (reset) {\r\n\t\t\tif (_pin) {\r\n\t\t\t\tif (_state === SCENE_STATE_DURING) {\r\n\t\t\t\t\tupdatePinState(true); // force unpin at position\r\n\t\t\t\t}\r\n\t\t\t\tif (reset || !_controller) { // if there's no controller no progress was made anyway...\r\n\t\t\t\t\tvar pinTarget = _pinOptions.spacer.firstChild; // usually the pin element, but may be another spacer (cascaded pins)...\r\n\t\t\t\t\tif (pinTarget.hasAttribute(PIN_SPACER_ATTRIBUTE)) { // copy margins to child spacer\r\n\t\t\t\t\t\tvar\r\n\t\t\t\t\t\t\tstyle = _pinOptions.spacer.style,\r\n\t\t\t\t\t\t\tvalues = [\"margin\", \"marginLeft\", \"marginRight\", \"marginTop\", \"marginBottom\"],\r\n\t\t\t\t\t\t\tmargins = {};\r\n\t\t\t\t\t\tvalues.forEach(function (val) {\r\n\t\t\t\t\t\t\tmargins[val] = style[val] || \"\";\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t_util.css(pinTarget, margins);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_pinOptions.spacer.parentNode.insertBefore(pinTarget, _pinOptions.spacer);\r\n\t\t\t\t\t_pinOptions.spacer.parentNode.removeChild(_pinOptions.spacer);\r\n\t\t\t\t\tif (!_pin.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) { // if it's the last pin for this element -> restore inline styles\r\n\t\t\t\t\t\t// TODO: only correctly set for first pin (when cascading) - how to fix?\r\n\t\t\t\t\t\t_util.css(_pin, _pin.___origStyle);\r\n\t\t\t\t\t\tdelete _pin.___origStyle;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\twindow.removeEventListener('scroll', updatePinInContainer);\r\n\t\t\t\twindow.removeEventListener('resize', updatePinInContainer);\r\n\t\t\t\twindow.removeEventListener('resize', updateRelativePinSpacer);\r\n\t\t\t\t_pin.removeEventListener(\"mousewheel\", onMousewheelOverPin);\r\n\t\t\t\t_pin.removeEventListener(\"DOMMouseScroll\", onMousewheelOverPin);\r\n\t\t\t\t_pin = undefined;\r\n\t\t\t\tlog(3, \"removed pin (reset: \" + (reset ? \"true\" : \"false\") + \")\");\r\n\t\t\t}\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\r\n\t\tvar\r\n\t\t\t_cssClasses,\r\n\t\t\t_cssClassElems = [];\r\n\r\n\t\tScene\r\n\t\t\t.on(\"destroy.internal\", function (e) {\r\n\t\t\t\tScene.removeClassToggle(e.reset);\r\n\t\t\t});\r\n\t\t/**\r\n\t\t * Define a css class modification while the scene is active.  \r\n\t\t * When the scene triggers the classes will be added to the supplied element and removed, when the scene is over.\r\n\t\t * If the scene duration is 0 the classes will only be removed if the user scrolls back past the start position.\r\n\t\t * @method ScrollMagic.Scene#setClassToggle\r\n\t\t * @example\r\n\t\t * // add the class 'myclass' to the element with the id 'my-elem' for the duration of the scene\r\n\t\t * scene.setClassToggle(\"#my-elem\", \"myclass\");\r\n\t\t *\r\n\t\t * // add multiple classes to multiple elements defined by the selector '.classChange'\r\n\t\t * scene.setClassToggle(\".classChange\", \"class1 class2 class3\");\r\n\t\t *\r\n\t\t * @param {(string|object)} element - A Selector targeting one or more elements or a DOM object that is supposed to be modified.\r\n\t\t * @param {string} classes - One or more Classnames (separated by space) that should be added to the element during the scene.\r\n\t\t *\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.setClassToggle = function (element, classes) {\r\n\t\t\tvar elems = _util.get.elements(element);\r\n\t\t\tif (elems.length === 0 || !_util.type.String(classes)) {\r\n\t\t\t\tlog(1, \"ERROR calling method 'setClassToggle()': Invalid \" + (elems.length === 0 ? \"element\" : \"classes\") + \" supplied.\");\r\n\t\t\t\treturn Scene;\r\n\t\t\t}\r\n\t\t\tif (_cssClassElems.length > 0) {\r\n\t\t\t\t// remove old ones\r\n\t\t\t\tScene.removeClassToggle();\r\n\t\t\t}\r\n\t\t\t_cssClasses = classes;\r\n\t\t\t_cssClassElems = elems;\r\n\t\t\tScene.on(\"enter.internal_class leave.internal_class\", function (e) {\r\n\t\t\t\tvar toggle = e.type === \"enter\" ? _util.addClass : _util.removeClass;\r\n\t\t\t\t_cssClassElems.forEach(function (elem, key) {\r\n\t\t\t\t\ttoggle(elem, _cssClasses);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Remove the class binding from the scene.\r\n\t\t * @method ScrollMagic.Scene#removeClassToggle\r\n\t\t * @example\r\n\t\t * // remove class binding from the scene without reset\r\n\t\t * scene.removeClassToggle();\r\n\t\t *\r\n\t\t * // remove class binding and remove the changes it caused\r\n\t\t * scene.removeClassToggle(true);\r\n\t\t *\r\n\t\t * @param {boolean} [reset=false] - If `false` and the classes are currently active, they will remain on the element. If `true` they will be removed.\r\n\t\t * @returns {Scene} Parent object for chaining.\r\n\t\t */\r\n\t\tthis.removeClassToggle = function (reset) {\r\n\t\t\tif (reset) {\r\n\t\t\t\t_cssClassElems.forEach(function (elem, key) {\r\n\t\t\t\t\t_util.removeClass(elem, _cssClasses);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tScene.off(\"start.internal_class end.internal_class\");\r\n\t\t\t_cssClasses = undefined;\r\n\t\t\t_cssClassElems = [];\r\n\t\t\treturn Scene;\r\n\t\t};\r\n\r\n\t\t// INIT\r\n\t\tconstruct();\r\n\t\treturn Scene;\r\n\t};\r\n\r\n\t// store pagewide scene options\r\n\tvar SCENE_OPTIONS = {\r\n\t\tdefaults: {\r\n\t\t\tduration: 0,\r\n\t\t\toffset: 0,\r\n\t\t\ttriggerElement: undefined,\r\n\t\t\ttriggerHook: 0.5,\r\n\t\t\treverse: true,\r\n\t\t\tloglevel: 2\r\n\t\t},\r\n\t\tvalidate: {\r\n\t\t\toffset: function (val) {\r\n\t\t\t\tval = parseFloat(val);\r\n\t\t\t\tif (!_util.type.Number(val)) {\r\n\t\t\t\t\tthrow [\"Invalid value for option \\\"offset\\\":\", val];\r\n\t\t\t\t}\r\n\t\t\t\treturn val;\r\n\t\t\t},\r\n\t\t\ttriggerElement: function (val) {\r\n\t\t\t\tval = val || undefined;\r\n\t\t\t\tif (val) {\r\n\t\t\t\t\tvar elem = _util.get.elements(val)[0];\r\n\t\t\t\t\tif (elem && elem.parentNode) {\r\n\t\t\t\t\t\tval = elem;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow [\"Element defined in option \\\"triggerElement\\\" was not found:\", val];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn val;\r\n\t\t\t},\r\n\t\t\ttriggerHook: function (val) {\r\n\t\t\t\tvar translate = {\r\n\t\t\t\t\t\"onCenter\": 0.5,\r\n\t\t\t\t\t\"onEnter\": 1,\r\n\t\t\t\t\t\"onLeave\": 0\r\n\t\t\t\t};\r\n\t\t\t\tif (_util.type.Number(val)) {\r\n\t\t\t\t\tval = Math.max(0, Math.min(parseFloat(val), 1)); //  make sure its betweeen 0 and 1\r\n\t\t\t\t} else if (val in translate) {\r\n\t\t\t\t\tval = translate[val];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow [\"Invalid value for option \\\"triggerHook\\\": \", val];\r\n\t\t\t\t}\r\n\t\t\t\treturn val;\r\n\t\t\t},\r\n\t\t\treverse: function (val) {\r\n\t\t\t\treturn !!val; // force boolean\r\n\t\t\t},\r\n\t\t\tloglevel: function (val) {\r\n\t\t\t\tval = parseInt(val);\r\n\t\t\t\tif (!_util.type.Number(val) || val < 0 || val > 3) {\r\n\t\t\t\t\tthrow [\"Invalid value for option \\\"loglevel\\\":\", val];\r\n\t\t\t\t}\r\n\t\t\t\treturn val;\r\n\t\t\t}\r\n\t\t}, // holder for  validation methods. duration validation is handled in 'getters-setters.js'\r\n\t\tshifts: [\"duration\", \"offset\", \"triggerHook\"], // list of options that trigger a `shift` event\r\n\t};\r\n\t/*\r\n\t * method used to add an option to ScrollMagic Scenes.\r\n\t * TODO: DOC (private for dev)\r\n\t */\r\n\tScrollMagic.Scene.addOption = function (name, defaultValue, validationCallback, shifts) {\r\n\t\tif (!(name in SCENE_OPTIONS.defaults)) {\r\n\t\t\tSCENE_OPTIONS.defaults[name] = defaultValue;\r\n\t\t\tSCENE_OPTIONS.validate[name] = validationCallback;\r\n\t\t\tif (shifts) {\r\n\t\t\t\tSCENE_OPTIONS.shifts.push(name);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tScrollMagic._util.log(1, \"[static] ScrollMagic.Scene -> Cannot add Scene option '\" + name + \"', because it already exists.\");\r\n\t\t}\r\n\t};\r\n\t// instance extension function for plugins\r\n\t// TODO: DOC (private for dev)\r\n\tScrollMagic.Scene.extend = function (extension) {\r\n\t\tvar oldClass = this;\r\n\t\tScrollMagic.Scene = function () {\r\n\t\t\toldClass.apply(this, arguments);\r\n\t\t\tthis.$super = _util.extend({}, this); // copy parent state\r\n\t\t\treturn extension.apply(this, arguments) || this;\r\n\t\t};\r\n\t\t_util.extend(ScrollMagic.Scene, oldClass); // copy properties\r\n\t\tScrollMagic.Scene.prototype = oldClass.prototype; // copy prototype\r\n\t\tScrollMagic.Scene.prototype.constructor = ScrollMagic.Scene; // restore constructor\r\n\t};\r\n\r\n\r\n\r\n\t/**\r\n\t * TODO: DOCS (private for dev)\r\n\t * @class\r\n\t * @private\r\n\t */\r\n\r\n\tScrollMagic.Event = function (type, namespace, target, vars) {\r\n\t\tvars = vars || {};\r\n\t\tfor (var key in vars) {\r\n\t\t\tthis[key] = vars[key];\r\n\t\t}\r\n\t\tthis.type = type;\r\n\t\tthis.target = this.currentTarget = target;\r\n\t\tthis.namespace = namespace || '';\r\n\t\tthis.timeStamp = this.timestamp = Date.now();\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/*\r\n\t * TODO: DOCS (private for dev)\r\n\t */\r\n\r\n\tvar _util = ScrollMagic._util = (function (window) {\r\n\t\tvar U = {},\r\n\t\t\ti;\r\n\r\n\t\t/**\r\n\t\t * ------------------------------\r\n\t\t * internal helpers\r\n\t\t * ------------------------------\r\n\t\t */\r\n\r\n\t\t// parse float and fall back to 0.\r\n\t\tvar floatval = function (number) {\r\n\t\t\treturn parseFloat(number) || 0;\r\n\t\t};\r\n\t\t// get current style IE safe (otherwise IE would return calculated values for 'auto')\r\n\t\tvar _getComputedStyle = function (elem) {\r\n\t\t\treturn elem.currentStyle ? elem.currentStyle : window.getComputedStyle(elem);\r\n\t\t};\r\n\r\n\t\t// get element dimension (width or height)\r\n\t\tvar _dimension = function (which, elem, outer, includeMargin) {\r\n\t\t\telem = (elem === document) ? window : elem;\r\n\t\t\tif (elem === window) {\r\n\t\t\t\tincludeMargin = false;\r\n\t\t\t} else if (!_type.DomElement(elem)) {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\twhich = which.charAt(0).toUpperCase() + which.substr(1).toLowerCase();\r\n\t\t\tvar dimension = (outer ? elem['offset' + which] || elem['outer' + which] : elem['client' + which] || elem['inner' + which]) || 0;\r\n\t\t\tif (outer && includeMargin) {\r\n\t\t\t\tvar style = _getComputedStyle(elem);\r\n\t\t\t\tdimension += which === 'Height' ? floatval(style.marginTop) + floatval(style.marginBottom) : floatval(style.marginLeft) + floatval(style.marginRight);\r\n\t\t\t}\r\n\t\t\treturn dimension;\r\n\t\t};\r\n\t\t// converts 'margin-top' into 'marginTop'\r\n\t\tvar _camelCase = function (str) {\r\n\t\t\treturn str.replace(/^[^a-z]+([a-z])/g, '$1').replace(/-([a-z])/g, function (g) {\r\n\t\t\t\treturn g[1].toUpperCase();\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * ------------------------------\r\n\t\t * external helpers\r\n\t\t * ------------------------------\r\n\t\t */\r\n\r\n\t\t// extend obj – same as jQuery.extend({}, objA, objB)\r\n\t\tU.extend = function (obj) {\r\n\t\t\tobj = obj || {};\r\n\t\t\tfor (i = 1; i < arguments.length; i++) {\r\n\t\t\t\tif (!arguments[i]) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tfor (var key in arguments[i]) {\r\n\t\t\t\t\tif (arguments[i].hasOwnProperty(key)) {\r\n\t\t\t\t\t\tobj[key] = arguments[i][key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t};\r\n\r\n\t\t// check if a css display type results in margin-collapse or not\r\n\t\tU.isMarginCollapseType = function (str) {\r\n\t\t\treturn [\"block\", \"flex\", \"list-item\", \"table\", \"-webkit-box\"].indexOf(str) > -1;\r\n\t\t};\r\n\r\n\t\t// implementation of requestAnimationFrame\r\n\t\t// based on https://gist.github.com/paulirish/1579671\r\n\t\tvar\r\n\t\t\tlastTime = 0,\r\n\t\t\tvendors = ['ms', 'moz', 'webkit', 'o'];\r\n\t\tvar _requestAnimationFrame = window.requestAnimationFrame;\r\n\t\tvar _cancelAnimationFrame = window.cancelAnimationFrame;\r\n\t\t// try vendor prefixes if the above doesn't work\r\n\t\tfor (i = 0; !_requestAnimationFrame && i < vendors.length; ++i) {\r\n\t\t\t_requestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame'];\r\n\t\t\t_cancelAnimationFrame = window[vendors[i] + 'CancelAnimationFrame'] || window[vendors[i] + 'CancelRequestAnimationFrame'];\r\n\t\t}\r\n\r\n\t\t// fallbacks\r\n\t\tif (!_requestAnimationFrame) {\r\n\t\t\t_requestAnimationFrame = function (callback) {\r\n\t\t\t\tvar\r\n\t\t\t\t\tcurrTime = new Date().getTime(),\r\n\t\t\t\t\ttimeToCall = Math.max(0, 16 - (currTime - lastTime)),\r\n\t\t\t\t\tid = window.setTimeout(function () {\r\n\t\t\t\t\t\tcallback(currTime + timeToCall);\r\n\t\t\t\t\t}, timeToCall);\r\n\t\t\t\tlastTime = currTime + timeToCall;\r\n\t\t\t\treturn id;\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (!_cancelAnimationFrame) {\r\n\t\t\t_cancelAnimationFrame = function (id) {\r\n\t\t\t\twindow.clearTimeout(id);\r\n\t\t\t};\r\n\t\t}\r\n\t\tU.rAF = _requestAnimationFrame.bind(window);\r\n\t\tU.cAF = _cancelAnimationFrame.bind(window);\r\n\r\n\t\tvar\r\n\t\t\tloglevels = [\"error\", \"warn\", \"log\"],\r\n\t\t\tconsole = window.console || {};\r\n\r\n\t\tconsole.log = console.log || function () {}; // no console log, well - do nothing then...\r\n\t\t// make sure methods for all levels exist.\r\n\t\tfor (i = 0; i < loglevels.length; i++) {\r\n\t\t\tvar method = loglevels[i];\r\n\t\t\tif (!console[method]) {\r\n\t\t\t\tconsole[method] = console.log; // prefer .log over nothing\r\n\t\t\t}\r\n\t\t}\r\n\t\tU.log = function (loglevel) {\r\n\t\t\tif (loglevel > loglevels.length || loglevel <= 0) loglevel = loglevels.length;\r\n\t\t\tvar now = new Date(),\r\n\t\t\t\ttime = (\"0\" + now.getHours()).slice(-2) + \":\" + (\"0\" + now.getMinutes()).slice(-2) + \":\" + (\"0\" + now.getSeconds()).slice(-2) + \":\" + (\"00\" + now.getMilliseconds()).slice(-3),\r\n\t\t\t\tmethod = loglevels[loglevel - 1],\r\n\t\t\t\targs = Array.prototype.splice.call(arguments, 1),\r\n\t\t\t\tfunc = Function.prototype.bind.call(console[method], console);\r\n\t\t\targs.unshift(time);\r\n\t\t\tfunc.apply(console, args);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * ------------------------------\r\n\t\t * type testing\r\n\t\t * ------------------------------\r\n\t\t */\r\n\r\n\t\tvar _type = U.type = function (v) {\r\n\t\t\treturn Object.prototype.toString.call(v).replace(/^\\[object (.+)\\]$/, \"$1\").toLowerCase();\r\n\t\t};\r\n\t\t_type.String = function (v) {\r\n\t\t\treturn _type(v) === 'string';\r\n\t\t};\r\n\t\t_type.Function = function (v) {\r\n\t\t\treturn _type(v) === 'function';\r\n\t\t};\r\n\t\t_type.Array = function (v) {\r\n\t\t\treturn Array.isArray(v);\r\n\t\t};\r\n\t\t_type.Number = function (v) {\r\n\t\t\treturn !_type.Array(v) && (v - parseFloat(v) + 1) >= 0;\r\n\t\t};\r\n\t\t_type.DomElement = function (o) {\r\n\t\t\treturn (\r\n\t\t\t\ttypeof HTMLElement === \"object\" || typeof HTMLElement === \"function\" ? o instanceof HTMLElement || o instanceof SVGElement : //DOM2\r\n\t\t\t\to && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\"\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * ------------------------------\r\n\t\t * DOM Element info\r\n\t\t * ------------------------------\r\n\t\t */\r\n\t\t// always returns a list of matching DOM elements, from a selector, a DOM element or an list of elements or even an array of selectors\r\n\t\tvar _get = U.get = {};\r\n\t\t_get.elements = function (selector) {\r\n\t\t\tvar arr = [];\r\n\t\t\tif (_type.String(selector)) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tselector = document.querySelectorAll(selector);\r\n\t\t\t\t} catch (e) { // invalid selector\r\n\t\t\t\t\treturn arr;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (_type(selector) === 'nodelist' || _type.Array(selector) || selector instanceof NodeList) {\r\n\t\t\t\tfor (var i = 0, ref = arr.length = selector.length; i < ref; i++) { // list of elements\r\n\t\t\t\t\tvar elem = selector[i];\r\n\t\t\t\t\tarr[i] = _type.DomElement(elem) ? elem : _get.elements(elem); // if not an element, try to resolve recursively\r\n\t\t\t\t}\r\n\t\t\t} else if (_type.DomElement(selector) || selector === document || selector === window) {\r\n\t\t\t\tarr = [selector]; // only the element\r\n\t\t\t}\r\n\t\t\treturn arr;\r\n\t\t};\r\n\t\t// get scroll top value\r\n\t\t_get.scrollTop = function (elem) {\r\n\t\t\treturn (elem && typeof elem.scrollTop === 'number') ? elem.scrollTop : window.pageYOffset || 0;\r\n\t\t};\r\n\t\t// get scroll left value\r\n\t\t_get.scrollLeft = function (elem) {\r\n\t\t\treturn (elem && typeof elem.scrollLeft === 'number') ? elem.scrollLeft : window.pageXOffset || 0;\r\n\t\t};\r\n\t\t// get element height\r\n\t\t_get.width = function (elem, outer, includeMargin) {\r\n\t\t\treturn _dimension('width', elem, outer, includeMargin);\r\n\t\t};\r\n\t\t// get element width\r\n\t\t_get.height = function (elem, outer, includeMargin) {\r\n\t\t\treturn _dimension('height', elem, outer, includeMargin);\r\n\t\t};\r\n\r\n\t\t// get element position (optionally relative to viewport)\r\n\t\t_get.offset = function (elem, relativeToViewport) {\r\n\t\t\tvar offset = {\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tleft: 0\r\n\t\t\t};\r\n\t\t\tif (elem && elem.getBoundingClientRect) { // check if available\r\n\t\t\t\tvar rect = elem.getBoundingClientRect();\r\n\t\t\t\toffset.top = rect.top;\r\n\t\t\t\toffset.left = rect.left;\r\n\t\t\t\tif (!relativeToViewport) { // clientRect is by default relative to viewport...\r\n\t\t\t\t\toffset.top += _get.scrollTop();\r\n\t\t\t\t\toffset.left += _get.scrollLeft();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn offset;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * ------------------------------\r\n\t\t * DOM Element manipulation\r\n\t\t * ------------------------------\r\n\t\t */\r\n\r\n\t\tU.addClass = function (elem, classname) {\r\n\t\t\tif (classname) {\r\n\t\t\t\tif (elem.classList)\r\n\t\t\t\t\telem.classList.add(classname);\r\n\t\t\t\telse\r\n\t\t\t\t\telem.className += ' ' + classname;\r\n\t\t\t}\r\n\t\t};\r\n\t\tU.removeClass = function (elem, classname) {\r\n\t\t\tif (classname) {\r\n\t\t\t\tif (elem.classList)\r\n\t\t\t\t\telem.classList.remove(classname);\r\n\t\t\t\telse\r\n\t\t\t\t\telem.className = elem.className.replace(new RegExp('(^|\\\\b)' + classname.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\r\n\t\t\t}\r\n\t\t};\r\n\t\t// if options is string -> returns css value\r\n\t\t// if options is array -> returns object with css value pairs\r\n\t\t// if options is object -> set new css values\r\n\t\tU.css = function (elem, options) {\r\n\t\t\tif (_type.String(options)) {\r\n\t\t\t\treturn _getComputedStyle(elem)[_camelCase(options)];\r\n\t\t\t} else if (_type.Array(options)) {\r\n\t\t\t\tvar\r\n\t\t\t\t\tobj = {},\r\n\t\t\t\t\tstyle = _getComputedStyle(elem);\r\n\t\t\t\toptions.forEach(function (option, key) {\r\n\t\t\t\t\tobj[option] = style[_camelCase(option)];\r\n\t\t\t\t});\r\n\t\t\t\treturn obj;\r\n\t\t\t} else {\r\n\t\t\t\tfor (var option in options) {\r\n\t\t\t\t\tvar val = options[option];\r\n\t\t\t\t\tif (val == parseFloat(val)) { // assume pixel for seemingly numerical values\r\n\t\t\t\t\t\tval += 'px';\r\n\t\t\t\t\t}\r\n\t\t\t\t\telem.style[_camelCase(option)] = val;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn U;\r\n\t}(window || {}));\r\n\r\n\r\n\tScrollMagic.Scene.prototype.addIndicators = function () {\r\n\t\tScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling addIndicators() due to missing Plugin \\'debug.addIndicators\\'. Please make sure to include plugins/debug.addIndicators.js');\r\n\t\treturn this;\r\n\t}\r\n\tScrollMagic.Scene.prototype.removeIndicators = function () {\r\n\t\tScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeIndicators() due to missing Plugin \\'debug.addIndicators\\'. Please make sure to include plugins/debug.addIndicators.js');\r\n\t\treturn this;\r\n\t}\r\n\tScrollMagic.Scene.prototype.setTween = function () {\r\n\t\tScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling setTween() due to missing Plugin \\'animation.gsap\\'. Please make sure to include plugins/animation.gsap.js');\r\n\t\treturn this;\r\n\t}\r\n\tScrollMagic.Scene.prototype.removeTween = function () {\r\n\t\tScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeTween() due to missing Plugin \\'animation.gsap\\'. Please make sure to include plugins/animation.gsap.js');\r\n\t\treturn this;\r\n\t}\r\n\tScrollMagic.Scene.prototype.setVelocity = function () {\r\n\t\tScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling setVelocity() due to missing Plugin \\'animation.velocity\\'. Please make sure to include plugins/animation.velocity.js');\r\n\t\treturn this;\r\n\t}\r\n\tScrollMagic.Scene.prototype.removeVelocity = function () {\r\n\t\tScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeVelocity() due to missing Plugin \\'animation.velocity\\'. Please make sure to include plugins/animation.velocity.js');\r\n\t\treturn this;\r\n\t}\r\n\r\n\treturn ScrollMagic;\r\n}));","/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.8.1\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this, dataSettings;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',\n                nextArrow: '<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return $('<button type=\"button\" />').text(i + 1);\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                focusOnChange: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnFocus: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                useTransform: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true,\n                zIndex: 1000\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                scrolling: false,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                swiping: false,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false,\n                unslicked: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.focussed = false;\n            _.interrupted = false;\n            _.hidden = 'hidden';\n            _.paused = true;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n            _.registerBreakpoints();\n            _.init(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.activateADA = function() {\n        var _ = this;\n\n        _.$slideTrack.find('.slick-active').attr({\n            'aria-hidden': 'false'\n        }).find('a, input, button, select').attr({\n            'tabindex': '0'\n        });\n\n    };\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.getNavTarget = function() {\n\n        var _ = this,\n            asNavFor = _.options.asNavFor;\n\n        if ( asNavFor && asNavFor !== null ) {\n            asNavFor = $(asNavFor).not(_.$slider);\n        }\n\n        return asNavFor;\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n\n        var _ = this,\n            asNavFor = _.getNavTarget();\n\n        if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n            asNavFor.each(function() {\n                var target = $(this).slick('getSlick');\n                if(!target.unslicked) {\n                    target.slideHandler(index, true);\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.autoPlay = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        if ( _.slideCount > _.options.slidesToShow ) {\n            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this,\n            slideTo = _.currentSlide + _.options.slidesToScroll;\n\n        if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n            if ( _.options.infinite === false ) {\n\n                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n                    _.direction = 0;\n                }\n\n                else if ( _.direction === 0 ) {\n\n                    slideTo = _.currentSlide - _.options.slidesToScroll;\n\n                    if ( _.currentSlide - 1 === 0 ) {\n                        _.direction = 1;\n                    }\n\n                }\n\n            }\n\n            _.slideHandler( slideTo );\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true ) {\n\n            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n            if( _.slideCount > _.options.slidesToShow ) {\n\n                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n                if (_.htmlExpr.test(_.options.prevArrow)) {\n                    _.$prevArrow.prependTo(_.options.appendArrows);\n                }\n\n                if (_.htmlExpr.test(_.options.nextArrow)) {\n                    _.$nextArrow.appendTo(_.options.appendArrows);\n                }\n\n                if (_.options.infinite !== true) {\n                    _.$prevArrow\n                        .addClass('slick-disabled')\n                        .attr('aria-disabled', 'true');\n                }\n\n            } else {\n\n                _.$prevArrow.add( _.$nextArrow )\n\n                    .addClass('slick-hidden')\n                    .attr({\n                        'aria-disabled': 'true',\n                        'tabindex': '-1'\n                    });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dot;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$slider.addClass('slick-dotted');\n\n            dot = $('<ul />').addClass(_.options.dotsClass);\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n            }\n\n            _.$dots = dot.appendTo(_.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slider\n                .children( _.options.slide + ':not(.slick-cloned)')\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element)\n                .attr('data-slick-index', index)\n                .data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div class=\"slick-list\"/>').parent();\n        _.$slideTrack.css('opacity', 0);\n\n        if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n            _.options.slidesToScroll = 1;\n        }\n\n        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.buildDots();\n\n        _.updateDots();\n\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n\n    };\n\n    Slick.prototype.buildRows = function() {\n\n        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if(_.options.rows > 0) {\n\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(\n                originalSlides.length / slidesPerSection\n            );\n\n            for(a = 0; a < numOfSlides; a++){\n                var slide = document.createElement('div');\n                for(b = 0; b < _.options.rows; b++) {\n                    var row = document.createElement('div');\n                    for(c = 0; c < _.options.slidesPerRow; c++) {\n                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n                        if (originalSlides.get(target)) {\n                            row.appendChild(originalSlides.get(target));\n                        }\n                    }\n                    slide.appendChild(row);\n                }\n                newSlides.appendChild(slide);\n            }\n\n            _.$slider.empty().append(newSlides);\n            _.$slider.children().children().children()\n                .css({\n                    'width':(100 / _.options.slidesPerRow) + '%',\n                    'display': 'inline-block'\n                });\n\n        }\n\n    };\n\n    Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n        var _ = this,\n            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n        var sliderWidth = _.$slider.width();\n        var windowWidth = window.innerWidth || $(window).width();\n\n        if (_.respondTo === 'window') {\n            respondToWidth = windowWidth;\n        } else if (_.respondTo === 'slider') {\n            respondToWidth = sliderWidth;\n        } else if (_.respondTo === 'min') {\n            respondToWidth = Math.min(windowWidth, sliderWidth);\n        }\n\n        if ( _.options.responsive &&\n            _.options.responsive.length &&\n            _.options.responsive !== null) {\n\n            targetBreakpoint = null;\n\n            for (breakpoint in _.breakpoints) {\n                if (_.breakpoints.hasOwnProperty(breakpoint)) {\n                    if (_.originalSettings.mobileFirst === false) {\n                        if (respondToWidth < _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    } else {\n                        if (respondToWidth > _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    }\n                }\n            }\n\n            if (targetBreakpoint !== null) {\n                if (_.activeBreakpoint !== null) {\n                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n                        _.activeBreakpoint =\n                            targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick(targetBreakpoint);\n                        } else {\n                            _.options = $.extend({}, _.originalSettings,\n                                _.breakpointSettings[\n                                    targetBreakpoint]);\n                            if (initial === true) {\n                                _.currentSlide = _.options.initialSlide;\n                            }\n                            _.refresh(initial);\n                        }\n                        triggerBreakpoint = targetBreakpoint;\n                    }\n                } else {\n                    _.activeBreakpoint = targetBreakpoint;\n                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                        _.unslick(targetBreakpoint);\n                    } else {\n                        _.options = $.extend({}, _.originalSettings,\n                            _.breakpointSettings[\n                                targetBreakpoint]);\n                        if (initial === true) {\n                            _.currentSlide = _.options.initialSlide;\n                        }\n                        _.refresh(initial);\n                    }\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            } else {\n                if (_.activeBreakpoint !== null) {\n                    _.activeBreakpoint = null;\n                    _.options = _.originalSettings;\n                    if (initial === true) {\n                        _.currentSlide = _.options.initialSlide;\n                    }\n                    _.refresh(initial);\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            }\n\n            // only trigger breakpoints during an actual break. not on initialize.\n            if( !initial && triggerBreakpoint !== false ) {\n                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n            }\n        }\n\n    };\n\n    Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.currentTarget),\n            indexOffset, slideOffset, unevenOffset;\n\n        // If target is a link, prevent default action.\n        if($target.is('a')) {\n            event.preventDefault();\n        }\n\n        // If target is not the <li> element (ie: a child), find the <li>.\n        if(!$target.is('li')) {\n            $target = $target.closest('li');\n        }\n\n        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n        switch (event.data.message) {\n\n            case 'previous':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'next':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'index':\n                var index = event.data.index === 0 ? 0 :\n                    event.data.index || $target.index() * _.options.slidesToScroll;\n\n                _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n                $target.children().trigger('focus');\n                break;\n\n            default:\n                return;\n        }\n\n    };\n\n    Slick.prototype.checkNavigable = function(index) {\n\n        var _ = this,\n            navigables, prevNavigable;\n\n        navigables = _.getNavigableIndexes();\n        prevNavigable = 0;\n        if (index > navigables[navigables.length - 1]) {\n            index = navigables[navigables.length - 1];\n        } else {\n            for (var n in navigables) {\n                if (index < navigables[n]) {\n                    index = prevNavigable;\n                    break;\n                }\n                prevNavigable = navigables[n];\n            }\n        }\n\n        return index;\n    };\n\n    Slick.prototype.cleanUpEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots && _.$dots !== null) {\n\n            $('li', _.$dots)\n                .off('click.slick', _.changeSlide)\n                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n            if (_.options.accessibility === true) {\n                _.$dots.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$slider.off('focus.slick blur.slick');\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n        _.$list.off('click.slick', _.clickHandler);\n\n        $(document).off(_.visibilityChange, _.visibility);\n\n        _.cleanUpSlideEvents();\n\n        if (_.options.accessibility === true) {\n            _.$list.off('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n        }\n\n        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.cleanUpSlideEvents = function() {\n\n        var _ = this;\n\n        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n    };\n\n    Slick.prototype.cleanUpRows = function() {\n\n        var _ = this, originalSlides;\n\n        if(_.options.rows > 0) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.empty().append(originalSlides);\n        }\n\n    };\n\n    Slick.prototype.clickHandler = function(event) {\n\n        var _ = this;\n\n        if (_.shouldClick === false) {\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n\n    };\n\n    Slick.prototype.destroy = function(refresh) {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        _.touchObject = {};\n\n        _.cleanUpEvents();\n\n        $('.slick-cloned', _.$slider).detach();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if ( _.$prevArrow && _.$prevArrow.length ) {\n\n            _.$prevArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.prevArrow )) {\n                _.$prevArrow.remove();\n            }\n        }\n\n        if ( _.$nextArrow && _.$nextArrow.length ) {\n\n            _.$nextArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.nextArrow )) {\n                _.$nextArrow.remove();\n            }\n        }\n\n\n        if (_.$slides) {\n\n            _.$slides\n                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n                .removeAttr('aria-hidden')\n                .removeAttr('data-slick-index')\n                .each(function(){\n                    $(this).attr('style', $(this).data('originalStyling'));\n                });\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slideTrack.detach();\n\n            _.$list.detach();\n\n            _.$slider.append(_.$slides);\n        }\n\n        _.cleanUpRows();\n\n        _.$slider.removeClass('slick-slider');\n        _.$slider.removeClass('slick-initialized');\n        _.$slider.removeClass('slick-dotted');\n\n        _.unslicked = true;\n\n        if(!refresh) {\n            _.$slider.trigger('destroy', [_]);\n        }\n\n    };\n\n    Slick.prototype.disableTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        transition[_.transitionType] = '';\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).css({\n                zIndex: _.options.zIndex\n            });\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 1\n            }, _.options.speed, _.options.easing, callback);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 1,\n                zIndex: _.options.zIndex\n            });\n\n            if (callback) {\n                setTimeout(function() {\n\n                    _.disableTransition(slideIndex);\n\n                    callback.call();\n                }, _.options.speed);\n            }\n\n        }\n\n    };\n\n    Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            }, _.options.speed, _.options.easing);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            });\n\n        }\n\n    };\n\n    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n        var _ = this;\n\n        if (filter !== null) {\n\n            _.$slidesCache = _.$slides;\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.focusHandler = function() {\n\n        var _ = this;\n\n        _.$slider\n            .off('focus.slick blur.slick')\n            .on('focus.slick blur.slick', '*', function(event) {\n\n            event.stopImmediatePropagation();\n            var $sf = $(this);\n\n            setTimeout(function() {\n\n                if( _.options.pauseOnFocus ) {\n                    _.focussed = $sf.is(':focus');\n                    _.autoPlay();\n                }\n\n            }, 0);\n\n        });\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n        var _ = this;\n        return _.currentSlide;\n\n    };\n\n    Slick.prototype.getDotCount = function() {\n\n        var _ = this;\n\n        var breakPoint = 0;\n        var counter = 0;\n        var pagerQty = 0;\n\n        if (_.options.infinite === true) {\n            if (_.slideCount <= _.options.slidesToShow) {\n                 ++pagerQty;\n            } else {\n                while (breakPoint < _.slideCount) {\n                    ++pagerQty;\n                    breakPoint = counter + _.options.slidesToScroll;\n                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n                }\n            }\n        } else if (_.options.centerMode === true) {\n            pagerQty = _.slideCount;\n        } else if(!_.options.asNavFor) {\n            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n        }else {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToScroll;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        }\n\n        return pagerQty - 1;\n\n    };\n\n    Slick.prototype.getLeft = function(slideIndex) {\n\n        var _ = this,\n            targetLeft,\n            verticalHeight,\n            verticalOffset = 0,\n            targetSlide,\n            coef;\n\n        _.slideOffset = 0;\n        verticalHeight = _.$slides.first().outerHeight(true);\n\n        if (_.options.infinite === true) {\n            if (_.slideCount > _.options.slidesToShow) {\n                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n                coef = -1\n\n                if (_.options.vertical === true && _.options.centerMode === true) {\n                    if (_.options.slidesToShow === 2) {\n                        coef = -1.5;\n                    } else if (_.options.slidesToShow === 1) {\n                        coef = -2\n                    }\n                }\n                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;\n            }\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n                    if (slideIndex > _.slideCount) {\n                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n                    } else {\n                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n                    }\n                }\n            }\n        } else {\n            if (slideIndex + _.options.slidesToShow > _.slideCount) {\n                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n            }\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = 0;\n            verticalOffset = 0;\n        }\n\n        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\n        } else if (_.options.centerMode === true && _.options.infinite === true) {\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n        } else if (_.options.centerMode === true) {\n            _.slideOffset = 0;\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n        }\n\n        if (_.options.vertical === false) {\n            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n        } else {\n            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n        }\n\n        if (_.options.variableWidth === true) {\n\n            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n            } else {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n            }\n\n            if (_.options.rtl === true) {\n                if (targetSlide[0]) {\n                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                } else {\n                    targetLeft =  0;\n                }\n            } else {\n                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n            }\n\n            if (_.options.centerMode === true) {\n                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n                } else {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n                }\n\n                if (_.options.rtl === true) {\n                    if (targetSlide[0]) {\n                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                    } else {\n                        targetLeft =  0;\n                    }\n                } else {\n                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n                }\n\n                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n            }\n        }\n\n        return targetLeft;\n\n    };\n\n    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n        var _ = this;\n\n        return _.options[option];\n\n    };\n\n    Slick.prototype.getNavigableIndexes = function() {\n\n        var _ = this,\n            breakPoint = 0,\n            counter = 0,\n            indexes = [],\n            max;\n\n        if (_.options.infinite === false) {\n            max = _.slideCount;\n        } else {\n            breakPoint = _.options.slidesToScroll * -1;\n            counter = _.options.slidesToScroll * -1;\n            max = _.slideCount * 2;\n        }\n\n        while (breakPoint < max) {\n            indexes.push(breakPoint);\n            breakPoint = counter + _.options.slidesToScroll;\n            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n\n        return indexes;\n\n    };\n\n    Slick.prototype.getSlick = function() {\n\n        return this;\n\n    };\n\n    Slick.prototype.getSlideCount = function() {\n\n        var _ = this,\n            slidesTraversed, swipedSlide, centerOffset;\n\n        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n        if (_.options.swipeToSlide === true) {\n            _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n                    swipedSlide = slide;\n                    return false;\n                }\n            });\n\n            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n            return slidesTraversed;\n\n        } else {\n            return _.options.slidesToScroll;\n        }\n\n    };\n\n    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: parseInt(slide)\n            }\n        }, dontAnimate);\n\n    };\n\n    Slick.prototype.init = function(creation) {\n\n        var _ = this;\n\n        if (!$(_.$slider).hasClass('slick-initialized')) {\n\n            $(_.$slider).addClass('slick-initialized');\n\n            _.buildRows();\n            _.buildOut();\n            _.setProps();\n            _.startLoad();\n            _.loadSlider();\n            _.initializeEvents();\n            _.updateArrows();\n            _.updateDots();\n            _.checkResponsive(true);\n            _.focusHandler();\n\n        }\n\n        if (creation) {\n            _.$slider.trigger('init', [_]);\n        }\n\n        if (_.options.accessibility === true) {\n            _.initADA();\n        }\n\n        if ( _.options.autoplay ) {\n\n            _.paused = false;\n            _.autoPlay();\n\n        }\n\n    };\n\n    Slick.prototype.initADA = function() {\n        var _ = this,\n                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\n                    return (val >= 0) && (val < _.slideCount);\n                });\n\n        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n        }).find('a, input, button, select').attr({\n            'tabindex': '-1'\n        });\n\n        if (_.$dots !== null) {\n            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n                var slideControlIndex = tabControlIndexes.indexOf(i);\n\n                $(this).attr({\n                    'role': 'tabpanel',\n                    'id': 'slick-slide' + _.instanceUid + i,\n                    'tabindex': -1\n                });\n\n                if (slideControlIndex !== -1) {\n                   var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex\n                   if ($('#' + ariaButtonControl).length) {\n                     $(this).attr({\n                         'aria-describedby': ariaButtonControl\n                     });\n                   }\n                }\n            });\n\n            _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n                var mappedSlideIndex = tabControlIndexes[i];\n\n                $(this).attr({\n                    'role': 'presentation'\n                });\n\n                $(this).find('button').first().attr({\n                    'role': 'tab',\n                    'id': 'slick-slide-control' + _.instanceUid + i,\n                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n                    'aria-label': (i + 1) + ' of ' + numDotGroups,\n                    'aria-selected': null,\n                    'tabindex': '-1'\n                });\n\n            }).eq(_.currentSlide).find('button').attr({\n                'aria-selected': 'true',\n                'tabindex': '0'\n            }).end();\n        }\n\n        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\n          if (_.options.focusOnChange) {\n            _.$slides.eq(i).attr({'tabindex': '0'});\n          } else {\n            _.$slides.eq(i).removeAttr('tabindex');\n          }\n        }\n\n        _.activateADA();\n\n    };\n\n    Slick.prototype.initArrowEvents = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'previous'\n               }, _.changeSlide);\n            _.$nextArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'next'\n               }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow.on('keydown.slick', _.keyHandler);\n                _.$nextArrow.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n    };\n\n    Slick.prototype.initDotEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).on('click.slick', {\n                message: 'index'\n            }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$dots.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n\n            $('li', _.$dots)\n                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initSlideEvents = function() {\n\n        var _ = this;\n\n        if ( _.options.pauseOnHover ) {\n\n            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initializeEvents = function() {\n\n        var _ = this;\n\n        _.initArrowEvents();\n\n        _.initDotEvents();\n        _.initSlideEvents();\n\n        _.$list.on('touchstart.slick mousedown.slick', {\n            action: 'start'\n        }, _.swipeHandler);\n        _.$list.on('touchmove.slick mousemove.slick', {\n            action: 'move'\n        }, _.swipeHandler);\n        _.$list.on('touchend.slick mouseup.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n        _.$list.on('touchcancel.slick mouseleave.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n\n        _.$list.on('click.slick', _.clickHandler);\n\n        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n        if (_.options.accessibility === true) {\n            _.$list.on('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(_.setPosition);\n\n    };\n\n    Slick.prototype.initUI = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.show();\n            _.$nextArrow.show();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\n\n        }\n\n    };\n\n    Slick.prototype.keyHandler = function(event) {\n\n        var _ = this;\n         //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n            if (event.keyCode === 37 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'next' :  'previous'\n                    }\n                });\n            } else if (event.keyCode === 39 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'previous' : 'next'\n                    }\n                });\n            }\n        }\n\n    };\n\n    Slick.prototype.lazyLoad = function() {\n\n        var _ = this,\n            loadRange, cloneRange, rangeStart, rangeEnd;\n\n        function loadImages(imagesScope) {\n\n            $('img[data-lazy]', imagesScope).each(function() {\n\n                var image = $(this),\n                    imageSource = $(this).attr('data-lazy'),\n                    imageSrcSet = $(this).attr('data-srcset'),\n                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n\n                    image\n                        .animate({ opacity: 0 }, 100, function() {\n\n                            if (imageSrcSet) {\n                                image\n                                    .attr('srcset', imageSrcSet );\n\n                                if (imageSizes) {\n                                    image\n                                        .attr('sizes', imageSizes );\n                                }\n                            }\n\n                            image\n                                .attr('src', imageSource)\n                                .animate({ opacity: 1 }, 200, function() {\n                                    image\n                                        .removeAttr('data-lazy data-srcset data-sizes')\n                                        .removeClass('slick-loading');\n                                });\n                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n                        });\n\n                };\n\n                imageToLoad.onerror = function() {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                };\n\n                imageToLoad.src = imageSource;\n\n            });\n\n        }\n\n        if (_.options.centerMode === true) {\n            if (_.options.infinite === true) {\n                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n                rangeEnd = rangeStart + _.options.slidesToShow + 2;\n            } else {\n                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n            }\n        } else {\n            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n            if (_.options.fade === true) {\n                if (rangeStart > 0) rangeStart--;\n                if (rangeEnd <= _.slideCount) rangeEnd++;\n            }\n        }\n\n        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n        if (_.options.lazyLoad === 'anticipated') {\n            var prevSlide = rangeStart - 1,\n                nextSlide = rangeEnd,\n                $slides = _.$slider.find('.slick-slide');\n\n            for (var i = 0; i < _.options.slidesToScroll; i++) {\n                if (prevSlide < 0) prevSlide = _.slideCount - 1;\n                loadRange = loadRange.add($slides.eq(prevSlide));\n                loadRange = loadRange.add($slides.eq(nextSlide));\n                prevSlide--;\n                nextSlide++;\n            }\n        }\n\n        loadImages(loadRange);\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-slide');\n            loadImages(cloneRange);\n        } else\n        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n            loadImages(cloneRange);\n        } else if (_.currentSlide === 0) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n            loadImages(cloneRange);\n        }\n\n    };\n\n    Slick.prototype.loadSlider = function() {\n\n        var _ = this;\n\n        _.setPosition();\n\n        _.$slideTrack.css({\n            opacity: 1\n        });\n\n        _.$slider.removeClass('slick-loading');\n\n        _.initUI();\n\n        if (_.options.lazyLoad === 'progressive') {\n            _.progressiveLazyLoad();\n        }\n\n    };\n\n    Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n\n    };\n\n    Slick.prototype.orientationChange = function() {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\n\n    };\n\n    Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n        var _ = this;\n\n        _.autoPlay();\n        _.options.autoplay = true;\n        _.paused = false;\n        _.focussed = false;\n        _.interrupted = false;\n\n    };\n\n    Slick.prototype.postSlide = function(index) {\n\n        var _ = this;\n\n        if( !_.unslicked ) {\n\n            _.$slider.trigger('afterChange', [_, index]);\n\n            _.animating = false;\n\n            if (_.slideCount > _.options.slidesToShow) {\n                _.setPosition();\n            }\n\n            _.swipeLeft = null;\n\n            if ( _.options.autoplay ) {\n                _.autoPlay();\n            }\n\n            if (_.options.accessibility === true) {\n                _.initADA();\n\n                if (_.options.focusOnChange) {\n                    var $currentSlide = $(_.$slides.get(_.currentSlide));\n                    $currentSlide.attr('tabindex', 0).focus();\n                }\n            }\n\n        }\n\n    };\n\n    Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n\n    };\n\n    Slick.prototype.preventDefault = function(event) {\n\n        event.preventDefault();\n\n    };\n\n    Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n        tryCount = tryCount || 1;\n\n        var _ = this,\n            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n            image,\n            imageSource,\n            imageSrcSet,\n            imageSizes,\n            imageToLoad;\n\n        if ( $imgsToLoad.length ) {\n\n            image = $imgsToLoad.first();\n            imageSource = image.attr('data-lazy');\n            imageSrcSet = image.attr('data-srcset');\n            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n            imageToLoad = document.createElement('img');\n\n            imageToLoad.onload = function() {\n\n                if (imageSrcSet) {\n                    image\n                        .attr('srcset', imageSrcSet );\n\n                    if (imageSizes) {\n                        image\n                            .attr('sizes', imageSizes );\n                    }\n                }\n\n                image\n                    .attr( 'src', imageSource )\n                    .removeAttr('data-lazy data-srcset data-sizes')\n                    .removeClass('slick-loading');\n\n                if ( _.options.adaptiveHeight === true ) {\n                    _.setPosition();\n                }\n\n                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n                _.progressiveLazyLoad();\n\n            };\n\n            imageToLoad.onerror = function() {\n\n                if ( tryCount < 3 ) {\n\n                    /**\n                     * try to load the image 3 times,\n                     * leave a slight delay so we don't get\n                     * servers blocking the request.\n                     */\n                    setTimeout( function() {\n                        _.progressiveLazyLoad( tryCount + 1 );\n                    }, 500 );\n\n                } else {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                    _.progressiveLazyLoad();\n\n                }\n\n            };\n\n            imageToLoad.src = imageSource;\n\n        } else {\n\n            _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n        }\n\n    };\n\n    Slick.prototype.refresh = function( initializing ) {\n\n        var _ = this, currentSlide, lastVisibleIndex;\n\n        lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n        // in non-infinite sliders, we don't want to go past the\n        // last visible index.\n        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n            _.currentSlide = lastVisibleIndex;\n        }\n\n        // if less slides than to show, go to start.\n        if ( _.slideCount <= _.options.slidesToShow ) {\n            _.currentSlide = 0;\n\n        }\n\n        currentSlide = _.currentSlide;\n\n        _.destroy(true);\n\n        $.extend(_, _.initials, { currentSlide: currentSlide });\n\n        _.init();\n\n        if( !initializing ) {\n\n            _.changeSlide({\n                data: {\n                    message: 'index',\n                    index: currentSlide\n                }\n            }, false);\n\n        }\n\n    };\n\n    Slick.prototype.registerBreakpoints = function() {\n\n        var _ = this, breakpoint, currentBreakpoint, l,\n            responsiveSettings = _.options.responsive || null;\n\n        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n            _.respondTo = _.options.respondTo || 'window';\n\n            for ( breakpoint in responsiveSettings ) {\n\n                l = _.breakpoints.length-1;\n\n                if (responsiveSettings.hasOwnProperty(breakpoint)) {\n                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n                    // loop through the breakpoints and cut out any existing\n                    // ones with the same breakpoint number, we don't want dupes.\n                    while( l >= 0 ) {\n                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n                            _.breakpoints.splice(l,1);\n                        }\n                        l--;\n                    }\n\n                    _.breakpoints.push(currentBreakpoint);\n                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n                }\n\n            }\n\n            _.breakpoints.sort(function(a, b) {\n                return ( _.options.mobileFirst ) ? a-b : b-a;\n            });\n\n        }\n\n    };\n\n    Slick.prototype.reinit = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slideTrack\n                .children(_.options.slide)\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n            _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.currentSlide = 0;\n        }\n\n        _.registerBreakpoints();\n\n        _.setProps();\n        _.setupInfinite();\n        _.buildArrows();\n        _.updateArrows();\n        _.initArrowEvents();\n        _.buildDots();\n        _.updateDots();\n        _.initDotEvents();\n        _.cleanUpSlideEvents();\n        _.initSlideEvents();\n\n        _.checkResponsive(false, true);\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        _.setPosition();\n        _.focusHandler();\n\n        _.paused = !_.options.autoplay;\n        _.autoPlay();\n\n        _.$slider.trigger('reInit', [_]);\n\n    };\n\n    Slick.prototype.resize = function() {\n\n        var _ = this;\n\n        if ($(window).width() !== _.windowWidth) {\n            clearTimeout(_.windowDelay);\n            _.windowDelay = window.setTimeout(function() {\n                _.windowWidth = $(window).width();\n                _.checkResponsive();\n                if( !_.unslicked ) { _.setPosition(); }\n            }, 50);\n        }\n    };\n\n    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            removeBefore = index;\n            index = removeBefore === true ? 0 : _.slideCount - 1;\n        } else {\n            index = removeBefore === true ? --index : index;\n        }\n\n        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n            return false;\n        }\n\n        _.unload();\n\n        if (removeAll === true) {\n            _.$slideTrack.children().remove();\n        } else {\n            _.$slideTrack.children(this.options.slide).eq(index).remove();\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.setCSS = function(position) {\n\n        var _ = this,\n            positionProps = {},\n            x, y;\n\n        if (_.options.rtl === true) {\n            position = -position;\n        }\n        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n        positionProps[_.positionProp] = position;\n\n        if (_.transformsEnabled === false) {\n            _.$slideTrack.css(positionProps);\n        } else {\n            positionProps = {};\n            if (_.cssTransitions === false) {\n                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n                _.$slideTrack.css(positionProps);\n            } else {\n                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n                _.$slideTrack.css(positionProps);\n            }\n        }\n\n    };\n\n    Slick.prototype.setDimensions = function() {\n\n        var _ = this;\n\n        if (_.options.vertical === false) {\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: ('0px ' + _.options.centerPadding)\n                });\n            }\n        } else {\n            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: (_.options.centerPadding + ' 0px')\n                });\n            }\n        }\n\n        _.listWidth = _.$list.width();\n        _.listHeight = _.$list.height();\n\n\n        if (_.options.vertical === false && _.options.variableWidth === false) {\n            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n        } else if (_.options.variableWidth === true) {\n            _.$slideTrack.width(5000 * _.slideCount);\n        } else {\n            _.slideWidth = Math.ceil(_.listWidth);\n            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n        }\n\n        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n    };\n\n    Slick.prototype.setFade = function() {\n\n        var _ = this,\n            targetLeft;\n\n        _.$slides.each(function(index, element) {\n            targetLeft = (_.slideWidth * index) * -1;\n            if (_.options.rtl === true) {\n                $(element).css({\n                    position: 'relative',\n                    right: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            } else {\n                $(element).css({\n                    position: 'relative',\n                    left: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            }\n        });\n\n        _.$slides.eq(_.currentSlide).css({\n            zIndex: _.options.zIndex - 1,\n            opacity: 1\n        });\n\n    };\n\n    Slick.prototype.setHeight = function() {\n\n        var _ = this;\n\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.css('height', targetHeight);\n        }\n\n    };\n\n    Slick.prototype.setOption =\n    Slick.prototype.slickSetOption = function() {\n\n        /**\n         * accepts arguments in format of:\n         *\n         *  - for changing a single option's value:\n         *     .slick(\"setOption\", option, value, refresh )\n         *\n         *  - for changing a set of responsive options:\n         *     .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n         *\n         *  - for updating multiple values at once (not responsive)\n         *     .slick(\"setOption\", { 'option': value, ... }, refresh )\n         */\n\n        var _ = this, l, item, option, value, refresh = false, type;\n\n        if( $.type( arguments[0] ) === 'object' ) {\n\n            option =  arguments[0];\n            refresh = arguments[1];\n            type = 'multiple';\n\n        } else if ( $.type( arguments[0] ) === 'string' ) {\n\n            option =  arguments[0];\n            value = arguments[1];\n            refresh = arguments[2];\n\n            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n                type = 'responsive';\n\n            } else if ( typeof arguments[1] !== 'undefined' ) {\n\n                type = 'single';\n\n            }\n\n        }\n\n        if ( type === 'single' ) {\n\n            _.options[option] = value;\n\n\n        } else if ( type === 'multiple' ) {\n\n            $.each( option , function( opt, val ) {\n\n                _.options[opt] = val;\n\n            });\n\n\n        } else if ( type === 'responsive' ) {\n\n            for ( item in value ) {\n\n                if( $.type( _.options.responsive ) !== 'array' ) {\n\n                    _.options.responsive = [ value[item] ];\n\n                } else {\n\n                    l = _.options.responsive.length-1;\n\n                    // loop through the responsive object and splice out duplicates.\n                    while( l >= 0 ) {\n\n                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n                            _.options.responsive.splice(l,1);\n\n                        }\n\n                        l--;\n\n                    }\n\n                    _.options.responsive.push( value[item] );\n\n                }\n\n            }\n\n        }\n\n        if ( refresh ) {\n\n            _.unload();\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.setPosition = function() {\n\n        var _ = this;\n\n        _.setDimensions();\n\n        _.setHeight();\n\n        if (_.options.fade === false) {\n            _.setCSS(_.getLeft(_.currentSlide));\n        } else {\n            _.setFade();\n        }\n\n        _.$slider.trigger('setPosition', [_]);\n\n    };\n\n    Slick.prototype.setProps = function() {\n\n        var _ = this,\n            bodyStyle = document.body.style;\n\n        _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n        if (_.positionProp === 'top') {\n            _.$slider.addClass('slick-vertical');\n        } else {\n            _.$slider.removeClass('slick-vertical');\n        }\n\n        if (bodyStyle.WebkitTransition !== undefined ||\n            bodyStyle.MozTransition !== undefined ||\n            bodyStyle.msTransition !== undefined) {\n            if (_.options.useCSS === true) {\n                _.cssTransitions = true;\n            }\n        }\n\n        if ( _.options.fade ) {\n            if ( typeof _.options.zIndex === 'number' ) {\n                if( _.options.zIndex < 3 ) {\n                    _.options.zIndex = 3;\n                }\n            } else {\n                _.options.zIndex = _.defaults.zIndex;\n            }\n        }\n\n        if (bodyStyle.OTransform !== undefined) {\n            _.animType = 'OTransform';\n            _.transformType = '-o-transform';\n            _.transitionType = 'OTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.MozTransform !== undefined) {\n            _.animType = 'MozTransform';\n            _.transformType = '-moz-transform';\n            _.transitionType = 'MozTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.webkitTransform !== undefined) {\n            _.animType = 'webkitTransform';\n            _.transformType = '-webkit-transform';\n            _.transitionType = 'webkitTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.msTransform !== undefined) {\n            _.animType = 'msTransform';\n            _.transformType = '-ms-transform';\n            _.transitionType = 'msTransition';\n            if (bodyStyle.msTransform === undefined) _.animType = false;\n        }\n        if (bodyStyle.transform !== undefined && _.animType !== false) {\n            _.animType = 'transform';\n            _.transformType = 'transform';\n            _.transitionType = 'transition';\n        }\n        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n    };\n\n\n    Slick.prototype.setSlideClasses = function(index) {\n\n        var _ = this,\n            centerOffset, allSlides, indexOffset, remainder;\n\n        allSlides = _.$slider\n            .find('.slick-slide')\n            .removeClass('slick-active slick-center slick-current')\n            .attr('aria-hidden', 'true');\n\n        _.$slides\n            .eq(index)\n            .addClass('slick-current');\n\n        if (_.options.centerMode === true) {\n\n            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n\n            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n                    _.$slides\n                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides\n                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n                if (index === 0) {\n\n                    allSlides\n                        .eq(allSlides.length - 1 - _.options.slidesToShow)\n                        .addClass('slick-center');\n\n                } else if (index === _.slideCount - 1) {\n\n                    allSlides\n                        .eq(_.options.slidesToShow)\n                        .addClass('slick-center');\n\n                }\n\n            }\n\n            _.$slides\n                .eq(index)\n                .addClass('slick-center');\n\n        } else {\n\n            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n                _.$slides\n                    .slice(index, index + _.options.slidesToShow)\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else if (allSlides.length <= _.options.slidesToShow) {\n\n                allSlides\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else {\n\n                remainder = _.slideCount % _.options.slidesToShow;\n                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n                    allSlides\n                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    allSlides\n                        .slice(indexOffset, indexOffset + _.options.slidesToShow)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n            }\n\n        }\n\n        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n            _.lazyLoad();\n        }\n    };\n\n    Slick.prototype.setupInfinite = function() {\n\n        var _ = this,\n            i, slideIndex, infiniteCount;\n\n        if (_.options.fade === true) {\n            _.options.centerMode = false;\n        }\n\n        if (_.options.infinite === true && _.options.fade === false) {\n\n            slideIndex = null;\n\n            if (_.slideCount > _.options.slidesToShow) {\n\n                if (_.options.centerMode === true) {\n                    infiniteCount = _.options.slidesToShow + 1;\n                } else {\n                    infiniteCount = _.options.slidesToShow;\n                }\n\n                for (i = _.slideCount; i > (_.slideCount -\n                        infiniteCount); i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex - _.slideCount)\n                        .prependTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {\n                    slideIndex = i;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex + _.slideCount)\n                        .appendTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n                    $(this).attr('id', '');\n                });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.interrupt = function( toggle ) {\n\n        var _ = this;\n\n        if( !toggle ) {\n            _.autoPlay();\n        }\n        _.interrupted = toggle;\n\n    };\n\n    Slick.prototype.selectHandler = function(event) {\n\n        var _ = this;\n\n        var targetElement =\n            $(event.target).is('.slick-slide') ?\n                $(event.target) :\n                $(event.target).parents('.slick-slide');\n\n        var index = parseInt(targetElement.attr('data-slick-index'));\n\n        if (!index) index = 0;\n\n        if (_.slideCount <= _.options.slidesToShow) {\n\n            _.slideHandler(index, false, true);\n            return;\n\n        }\n\n        _.slideHandler(index);\n\n    };\n\n    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n            _ = this, navTarget;\n\n        sync = sync || false;\n\n        if (_.animating === true && _.options.waitForAnimate === true) {\n            return;\n        }\n\n        if (_.options.fade === true && _.currentSlide === index) {\n            return;\n        }\n\n        if (sync === false) {\n            _.asNavFor(index);\n        }\n\n        targetSlide = index;\n        targetLeft = _.getLeft(targetSlide);\n        slideLeft = _.getLeft(_.currentSlide);\n\n        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        }\n\n        if ( _.options.autoplay ) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (targetSlide < 0) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n            } else {\n                animSlide = _.slideCount + targetSlide;\n            }\n        } else if (targetSlide >= _.slideCount) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = 0;\n            } else {\n                animSlide = targetSlide - _.slideCount;\n            }\n        } else {\n            animSlide = targetSlide;\n        }\n\n        _.animating = true;\n\n        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n        oldSlide = _.currentSlide;\n        _.currentSlide = animSlide;\n\n        _.setSlideClasses(_.currentSlide);\n\n        if ( _.options.asNavFor ) {\n\n            navTarget = _.getNavTarget();\n            navTarget = navTarget.slick('getSlick');\n\n            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n                navTarget.setSlideClasses(_.currentSlide);\n            }\n\n        }\n\n        _.updateDots();\n        _.updateArrows();\n\n        if (_.options.fade === true) {\n            if (dontAnimate !== true) {\n\n                _.fadeSlideOut(oldSlide);\n\n                _.fadeSlide(animSlide, function() {\n                    _.postSlide(animSlide);\n                });\n\n            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n            _.animateSlide(targetLeft, function() {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\n        }\n\n    };\n\n    Slick.prototype.startLoad = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.hide();\n            _.$nextArrow.hide();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n\n        }\n\n        _.$slider.addClass('slick-loading');\n\n    };\n\n    Slick.prototype.swipeDirection = function() {\n\n        var xDist, yDist, r, swipeAngle, _ = this;\n\n        xDist = _.touchObject.startX - _.touchObject.curX;\n        yDist = _.touchObject.startY - _.touchObject.curY;\n        r = Math.atan2(yDist, xDist);\n\n        swipeAngle = Math.round(r * 180 / Math.PI);\n        if (swipeAngle < 0) {\n            swipeAngle = 360 - Math.abs(swipeAngle);\n        }\n\n        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n            return (_.options.rtl === false ? 'right' : 'left');\n        }\n        if (_.options.verticalSwiping === true) {\n            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n                return 'down';\n            } else {\n                return 'up';\n            }\n        }\n\n        return 'vertical';\n\n    };\n\n    Slick.prototype.swipeEnd = function(event) {\n\n        var _ = this,\n            slideCount,\n            direction;\n\n        _.dragging = false;\n        _.swiping = false;\n\n        if (_.scrolling) {\n            _.scrolling = false;\n            return false;\n        }\n\n        _.interrupted = false;\n        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n        if ( _.touchObject.curX === undefined ) {\n            return false;\n        }\n\n        if ( _.touchObject.edgeHit === true ) {\n            _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n        }\n\n        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n            direction = _.swipeDirection();\n\n            switch ( direction ) {\n\n                case 'left':\n                case 'down':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n                            _.currentSlide + _.getSlideCount();\n\n                    _.currentDirection = 0;\n\n                    break;\n\n                case 'right':\n                case 'up':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n                            _.currentSlide - _.getSlideCount();\n\n                    _.currentDirection = 1;\n\n                    break;\n\n                default:\n\n\n            }\n\n            if( direction != 'vertical' ) {\n\n                _.slideHandler( slideCount );\n                _.touchObject = {};\n                _.$slider.trigger('swipe', [_, direction ]);\n\n            }\n\n        } else {\n\n            if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n                _.slideHandler( _.currentSlide );\n                _.touchObject = {};\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.swipeHandler = function(event) {\n\n        var _ = this;\n\n        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n            return;\n        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n            return;\n        }\n\n        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n            event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options\n            .touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options\n                .touchThreshold;\n        }\n\n        switch (event.data.action) {\n\n            case 'start':\n                _.swipeStart(event);\n                break;\n\n            case 'move':\n                _.swipeMove(event);\n                break;\n\n            case 'end':\n                _.swipeEnd(event);\n                break;\n\n        }\n\n    };\n\n    Slick.prototype.swipeMove = function(event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n            return false;\n        }\n\n        curLeft = _.getLeft(_.currentSlide);\n\n        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n        _.touchObject.swipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        verticalSwipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n            _.scrolling = true;\n            return false;\n        }\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = verticalSwipeLength;\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n            _.swiping = true;\n            event.preventDefault();\n        }\n\n        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n        if (_.options.verticalSwiping === true) {\n            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n        }\n\n\n        swipeLength = _.touchObject.swipeLength;\n\n        _.touchObject.edgeHit = false;\n\n        if (_.options.infinite === false) {\n            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n                _.touchObject.edgeHit = true;\n            }\n        }\n\n        if (_.options.vertical === false) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        } else {\n            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n        }\n        if (_.options.verticalSwiping === true) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        }\n\n        if (_.options.fade === true || _.options.touchMove === false) {\n            return false;\n        }\n\n        if (_.animating === true) {\n            _.swipeLeft = null;\n            return false;\n        }\n\n        _.setCSS(_.swipeLeft);\n\n    };\n\n    Slick.prototype.swipeStart = function(event) {\n\n        var _ = this,\n            touches;\n\n        _.interrupted = true;\n\n        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n            _.touchObject = {};\n            return false;\n        }\n\n        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n            touches = event.originalEvent.touches[0];\n        }\n\n        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n        _.dragging = true;\n\n    };\n\n    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n        var _ = this;\n\n        if (_.$slidesCache !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.unload = function() {\n\n        var _ = this;\n\n        $('.slick-cloned', _.$slider).remove();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n            _.$prevArrow.remove();\n        }\n\n        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n            _.$nextArrow.remove();\n        }\n\n        _.$slides\n            .removeClass('slick-slide slick-active slick-visible slick-current')\n            .attr('aria-hidden', 'true')\n            .css('width', '');\n\n    };\n\n    Slick.prototype.unslick = function(fromBreakpoint) {\n\n        var _ = this;\n        _.$slider.trigger('unslick', [_, fromBreakpoint]);\n        _.destroy();\n\n    };\n\n    Slick.prototype.updateArrows = function() {\n\n        var _ = this,\n            centerOffset;\n\n        centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n        if ( _.options.arrows === true &&\n            _.slideCount > _.options.slidesToShow &&\n            !_.options.infinite ) {\n\n            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            if (_.currentSlide === 0) {\n\n                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.updateDots = function() {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots\n                .find('li')\n                    .removeClass('slick-active')\n                    .end();\n\n            _.$dots\n                .find('li')\n                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n                .addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.visibility = function() {\n\n        var _ = this;\n\n        if ( _.options.autoplay ) {\n\n            if ( document[_.hidden] ) {\n\n                _.interrupted = true;\n\n            } else {\n\n                _.interrupted = false;\n\n            }\n\n        }\n\n    };\n\n    $.fn.slick = function() {\n        var _ = this,\n            opt = arguments[0],\n            args = Array.prototype.slice.call(arguments, 1),\n            l = _.length,\n            i,\n            ret;\n        for (i = 0; i < l; i++) {\n            if (typeof opt == 'object' || typeof opt == 'undefined')\n                _[i].slick = new Slick(_[i], opt);\n            else\n                ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n\n}));\n","/*!\nWaypoints - 4.0.1\nCopyright © 2011-2016 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\n*/\n(function() {\n  'use strict'\n\n  var keyCounter = 0\n  var allWaypoints = {}\n\n  /* http://imakewebthings.com/waypoints/api/waypoint */\n  function Waypoint(options) {\n    if (!options) {\n      throw new Error('No options passed to Waypoint constructor')\n    }\n    if (!options.element) {\n      throw new Error('No element option passed to Waypoint constructor')\n    }\n    if (!options.handler) {\n      throw new Error('No handler option passed to Waypoint constructor')\n    }\n\n    this.key = 'waypoint-' + keyCounter\n    this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\n    this.element = this.options.element\n    this.adapter = new Waypoint.Adapter(this.element)\n    this.callback = options.handler\n    this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n    this.enabled = this.options.enabled\n    this.triggerPoint = null\n    this.group = Waypoint.Group.findOrCreate({\n      name: this.options.group,\n      axis: this.axis\n    })\n    this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\n\n    if (Waypoint.offsetAliases[this.options.offset]) {\n      this.options.offset = Waypoint.offsetAliases[this.options.offset]\n    }\n    this.group.add(this)\n    this.context.add(this)\n    allWaypoints[this.key] = this\n    keyCounter += 1\n  }\n\n  /* Private */\n  Waypoint.prototype.queueTrigger = function(direction) {\n    this.group.queueTrigger(this, direction)\n  }\n\n  /* Private */\n  Waypoint.prototype.trigger = function(args) {\n    if (!this.enabled) {\n      return\n    }\n    if (this.callback) {\n      this.callback.apply(this, args)\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/destroy */\n  Waypoint.prototype.destroy = function() {\n    this.context.remove(this)\n    this.group.remove(this)\n    delete allWaypoints[this.key]\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/disable */\n  Waypoint.prototype.disable = function() {\n    this.enabled = false\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/enable */\n  Waypoint.prototype.enable = function() {\n    this.context.refresh()\n    this.enabled = true\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/next */\n  Waypoint.prototype.next = function() {\n    return this.group.next(this)\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/previous */\n  Waypoint.prototype.previous = function() {\n    return this.group.previous(this)\n  }\n\n  /* Private */\n  Waypoint.invokeAll = function(method) {\n    var allWaypointsArray = []\n    for (var waypointKey in allWaypoints) {\n      allWaypointsArray.push(allWaypoints[waypointKey])\n    }\n    for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\n      allWaypointsArray[i][method]()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/destroy-all */\n  Waypoint.destroyAll = function() {\n    Waypoint.invokeAll('destroy')\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/disable-all */\n  Waypoint.disableAll = function() {\n    Waypoint.invokeAll('disable')\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/enable-all */\n  Waypoint.enableAll = function() {\n    Waypoint.Context.refreshAll()\n    for (var waypointKey in allWaypoints) {\n      allWaypoints[waypointKey].enabled = true\n    }\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/refresh-all */\n  Waypoint.refreshAll = function() {\n    Waypoint.Context.refreshAll()\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/viewport-height */\n  Waypoint.viewportHeight = function() {\n    return window.innerHeight || document.documentElement.clientHeight\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/viewport-width */\n  Waypoint.viewportWidth = function() {\n    return document.documentElement.clientWidth\n  }\n\n  Waypoint.adapters = []\n\n  Waypoint.defaults = {\n    context: window,\n    continuous: true,\n    enabled: true,\n    group: 'default',\n    horizontal: false,\n    offset: 0\n  }\n\n  Waypoint.offsetAliases = {\n    'bottom-in-view': function() {\n      return this.context.innerHeight() - this.adapter.outerHeight()\n    },\n    'right-in-view': function() {\n      return this.context.innerWidth() - this.adapter.outerWidth()\n    }\n  }\n\n  window.Waypoint = Waypoint\n}())\n;(function() {\n  'use strict'\n\n  function requestAnimationFrameShim(callback) {\n    window.setTimeout(callback, 1000 / 60)\n  }\n\n  var keyCounter = 0\n  var contexts = {}\n  var Waypoint = window.Waypoint\n  var oldWindowLoad = window.onload\n\n  /* http://imakewebthings.com/waypoints/api/context */\n  function Context(element) {\n    this.element = element\n    this.Adapter = Waypoint.Adapter\n    this.adapter = new this.Adapter(element)\n    this.key = 'waypoint-context-' + keyCounter\n    this.didScroll = false\n    this.didResize = false\n    this.oldScroll = {\n      x: this.adapter.scrollLeft(),\n      y: this.adapter.scrollTop()\n    }\n    this.waypoints = {\n      vertical: {},\n      horizontal: {}\n    }\n\n    element.waypointContextKey = this.key\n    contexts[element.waypointContextKey] = this\n    keyCounter += 1\n    if (!Waypoint.windowContext) {\n      Waypoint.windowContext = true\n      Waypoint.windowContext = new Context(window)\n    }\n\n    this.createThrottledScrollHandler()\n    this.createThrottledResizeHandler()\n  }\n\n  /* Private */\n  Context.prototype.add = function(waypoint) {\n    var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'\n    this.waypoints[axis][waypoint.key] = waypoint\n    this.refresh()\n  }\n\n  /* Private */\n  Context.prototype.checkEmpty = function() {\n    var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)\n    var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)\n    var isWindow = this.element == this.element.window\n    if (horizontalEmpty && verticalEmpty && !isWindow) {\n      this.adapter.off('.waypoints')\n      delete contexts[this.key]\n    }\n  }\n\n  /* Private */\n  Context.prototype.createThrottledResizeHandler = function() {\n    var self = this\n\n    function resizeHandler() {\n      self.handleResize()\n      self.didResize = false\n    }\n\n    this.adapter.on('resize.waypoints', function() {\n      if (!self.didResize) {\n        self.didResize = true\n        Waypoint.requestAnimationFrame(resizeHandler)\n      }\n    })\n  }\n\n  /* Private */\n  Context.prototype.createThrottledScrollHandler = function() {\n    var self = this\n    function scrollHandler() {\n      self.handleScroll()\n      self.didScroll = false\n    }\n\n    this.adapter.on('scroll.waypoints', function() {\n      if (!self.didScroll || Waypoint.isTouch) {\n        self.didScroll = true\n        Waypoint.requestAnimationFrame(scrollHandler)\n      }\n    })\n  }\n\n  /* Private */\n  Context.prototype.handleResize = function() {\n    Waypoint.Context.refreshAll()\n  }\n\n  /* Private */\n  Context.prototype.handleScroll = function() {\n    var triggeredGroups = {}\n    var axes = {\n      horizontal: {\n        newScroll: this.adapter.scrollLeft(),\n        oldScroll: this.oldScroll.x,\n        forward: 'right',\n        backward: 'left'\n      },\n      vertical: {\n        newScroll: this.adapter.scrollTop(),\n        oldScroll: this.oldScroll.y,\n        forward: 'down',\n        backward: 'up'\n      }\n    }\n\n    for (var axisKey in axes) {\n      var axis = axes[axisKey]\n      var isForward = axis.newScroll > axis.oldScroll\n      var direction = isForward ? axis.forward : axis.backward\n\n      for (var waypointKey in this.waypoints[axisKey]) {\n        var waypoint = this.waypoints[axisKey][waypointKey]\n        if (waypoint.triggerPoint === null) {\n          continue\n        }\n        var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint\n        var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint\n        var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint\n        var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint\n        if (crossedForward || crossedBackward) {\n          waypoint.queueTrigger(direction)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n      }\n    }\n\n    for (var groupKey in triggeredGroups) {\n      triggeredGroups[groupKey].flushTriggers()\n    }\n\n    this.oldScroll = {\n      x: axes.horizontal.newScroll,\n      y: axes.vertical.newScroll\n    }\n  }\n\n  /* Private */\n  Context.prototype.innerHeight = function() {\n    /*eslint-disable eqeqeq */\n    if (this.element == this.element.window) {\n      return Waypoint.viewportHeight()\n    }\n    /*eslint-enable eqeqeq */\n    return this.adapter.innerHeight()\n  }\n\n  /* Private */\n  Context.prototype.remove = function(waypoint) {\n    delete this.waypoints[waypoint.axis][waypoint.key]\n    this.checkEmpty()\n  }\n\n  /* Private */\n  Context.prototype.innerWidth = function() {\n    /*eslint-disable eqeqeq */\n    if (this.element == this.element.window) {\n      return Waypoint.viewportWidth()\n    }\n    /*eslint-enable eqeqeq */\n    return this.adapter.innerWidth()\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-destroy */\n  Context.prototype.destroy = function() {\n    var allWaypoints = []\n    for (var axis in this.waypoints) {\n      for (var waypointKey in this.waypoints[axis]) {\n        allWaypoints.push(this.waypoints[axis][waypointKey])\n      }\n    }\n    for (var i = 0, end = allWaypoints.length; i < end; i++) {\n      allWaypoints[i].destroy()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-refresh */\n  Context.prototype.refresh = function() {\n    /*eslint-disable eqeqeq */\n    var isWindow = this.element == this.element.window\n    /*eslint-enable eqeqeq */\n    var contextOffset = isWindow ? undefined : this.adapter.offset()\n    var triggeredGroups = {}\n    var axes\n\n    this.handleScroll()\n    axes = {\n      horizontal: {\n        contextOffset: isWindow ? 0 : contextOffset.left,\n        contextScroll: isWindow ? 0 : this.oldScroll.x,\n        contextDimension: this.innerWidth(),\n        oldScroll: this.oldScroll.x,\n        forward: 'right',\n        backward: 'left',\n        offsetProp: 'left'\n      },\n      vertical: {\n        contextOffset: isWindow ? 0 : contextOffset.top,\n        contextScroll: isWindow ? 0 : this.oldScroll.y,\n        contextDimension: this.innerHeight(),\n        oldScroll: this.oldScroll.y,\n        forward: 'down',\n        backward: 'up',\n        offsetProp: 'top'\n      }\n    }\n\n    for (var axisKey in axes) {\n      var axis = axes[axisKey]\n      for (var waypointKey in this.waypoints[axisKey]) {\n        var waypoint = this.waypoints[axisKey][waypointKey]\n        var adjustment = waypoint.options.offset\n        var oldTriggerPoint = waypoint.triggerPoint\n        var elementOffset = 0\n        var freshWaypoint = oldTriggerPoint == null\n        var contextModifier, wasBeforeScroll, nowAfterScroll\n        var triggeredBackward, triggeredForward\n\n        if (waypoint.element !== waypoint.element.window) {\n          elementOffset = waypoint.adapter.offset()[axis.offsetProp]\n        }\n\n        if (typeof adjustment === 'function') {\n          adjustment = adjustment.apply(waypoint)\n        }\n        else if (typeof adjustment === 'string') {\n          adjustment = parseFloat(adjustment)\n          if (waypoint.options.offset.indexOf('%') > - 1) {\n            adjustment = Math.ceil(axis.contextDimension * adjustment / 100)\n          }\n        }\n\n        contextModifier = axis.contextScroll - axis.contextOffset\n        waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)\n        wasBeforeScroll = oldTriggerPoint < axis.oldScroll\n        nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll\n        triggeredBackward = wasBeforeScroll && nowAfterScroll\n        triggeredForward = !wasBeforeScroll && !nowAfterScroll\n\n        if (!freshWaypoint && triggeredBackward) {\n          waypoint.queueTrigger(axis.backward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n        else if (!freshWaypoint && triggeredForward) {\n          waypoint.queueTrigger(axis.forward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n        else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {\n          waypoint.queueTrigger(axis.forward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n      }\n    }\n\n    Waypoint.requestAnimationFrame(function() {\n      for (var groupKey in triggeredGroups) {\n        triggeredGroups[groupKey].flushTriggers()\n      }\n    })\n\n    return this\n  }\n\n  /* Private */\n  Context.findOrCreateByElement = function(element) {\n    return Context.findByElement(element) || new Context(element)\n  }\n\n  /* Private */\n  Context.refreshAll = function() {\n    for (var contextId in contexts) {\n      contexts[contextId].refresh()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-find-by-element */\n  Context.findByElement = function(element) {\n    return contexts[element.waypointContextKey]\n  }\n\n  window.onload = function() {\n    if (oldWindowLoad) {\n      oldWindowLoad()\n    }\n    Context.refreshAll()\n  }\n\n\n  Waypoint.requestAnimationFrame = function(callback) {\n    var requestFn = window.requestAnimationFrame ||\n      window.mozRequestAnimationFrame ||\n      window.webkitRequestAnimationFrame ||\n      requestAnimationFrameShim\n    requestFn.call(window, callback)\n  }\n  Waypoint.Context = Context\n}())\n;(function() {\n  'use strict'\n\n  function byTriggerPoint(a, b) {\n    return a.triggerPoint - b.triggerPoint\n  }\n\n  function byReverseTriggerPoint(a, b) {\n    return b.triggerPoint - a.triggerPoint\n  }\n\n  var groups = {\n    vertical: {},\n    horizontal: {}\n  }\n  var Waypoint = window.Waypoint\n\n  /* http://imakewebthings.com/waypoints/api/group */\n  function Group(options) {\n    this.name = options.name\n    this.axis = options.axis\n    this.id = this.name + '-' + this.axis\n    this.waypoints = []\n    this.clearTriggerQueues()\n    groups[this.axis][this.name] = this\n  }\n\n  /* Private */\n  Group.prototype.add = function(waypoint) {\n    this.waypoints.push(waypoint)\n  }\n\n  /* Private */\n  Group.prototype.clearTriggerQueues = function() {\n    this.triggerQueues = {\n      up: [],\n      down: [],\n      left: [],\n      right: []\n    }\n  }\n\n  /* Private */\n  Group.prototype.flushTriggers = function() {\n    for (var direction in this.triggerQueues) {\n      var waypoints = this.triggerQueues[direction]\n      var reverse = direction === 'up' || direction === 'left'\n      waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)\n      for (var i = 0, end = waypoints.length; i < end; i += 1) {\n        var waypoint = waypoints[i]\n        if (waypoint.options.continuous || i === waypoints.length - 1) {\n          waypoint.trigger([direction])\n        }\n      }\n    }\n    this.clearTriggerQueues()\n  }\n\n  /* Private */\n  Group.prototype.next = function(waypoint) {\n    this.waypoints.sort(byTriggerPoint)\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    var isLast = index === this.waypoints.length - 1\n    return isLast ? null : this.waypoints[index + 1]\n  }\n\n  /* Private */\n  Group.prototype.previous = function(waypoint) {\n    this.waypoints.sort(byTriggerPoint)\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    return index ? this.waypoints[index - 1] : null\n  }\n\n  /* Private */\n  Group.prototype.queueTrigger = function(waypoint, direction) {\n    this.triggerQueues[direction].push(waypoint)\n  }\n\n  /* Private */\n  Group.prototype.remove = function(waypoint) {\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    if (index > -1) {\n      this.waypoints.splice(index, 1)\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/first */\n  Group.prototype.first = function() {\n    return this.waypoints[0]\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/last */\n  Group.prototype.last = function() {\n    return this.waypoints[this.waypoints.length - 1]\n  }\n\n  /* Private */\n  Group.findOrCreate = function(options) {\n    return groups[options.axis][options.name] || new Group(options)\n  }\n\n  Waypoint.Group = Group\n}())\n;(function() {\n  'use strict'\n\n  var $ = window.jQuery\n  var Waypoint = window.Waypoint\n\n  function JQueryAdapter(element) {\n    this.$element = $(element)\n  }\n\n  $.each([\n    'innerHeight',\n    'innerWidth',\n    'off',\n    'offset',\n    'on',\n    'outerHeight',\n    'outerWidth',\n    'scrollLeft',\n    'scrollTop'\n  ], function(i, method) {\n    JQueryAdapter.prototype[method] = function() {\n      var args = Array.prototype.slice.call(arguments)\n      return this.$element[method].apply(this.$element, args)\n    }\n  })\n\n  $.each([\n    'extend',\n    'inArray',\n    'isEmptyObject'\n  ], function(i, method) {\n    JQueryAdapter[method] = $[method]\n  })\n\n  Waypoint.adapters.push({\n    name: 'jquery',\n    Adapter: JQueryAdapter\n  })\n  Waypoint.Adapter = JQueryAdapter\n}())\n;(function() {\n  'use strict'\n\n  var Waypoint = window.Waypoint\n\n  function createExtension(framework) {\n    return function() {\n      var waypoints = []\n      var overrides = arguments[0]\n\n      if (framework.isFunction(arguments[0])) {\n        overrides = framework.extend({}, arguments[1])\n        overrides.handler = arguments[0]\n      }\n\n      this.each(function() {\n        var options = framework.extend({}, overrides, {\n          element: this\n        })\n        if (typeof options.context === 'string') {\n          options.context = framework(this).closest(options.context)[0]\n        }\n        waypoints.push(new Waypoint(options))\n      })\n\n      return waypoints\n    }\n  }\n\n  if (window.jQuery) {\n    window.jQuery.fn.waypoint = createExtension(window.jQuery)\n  }\n  if (window.Zepto) {\n    window.Zepto.fn.waypoint = createExtension(window.Zepto)\n  }\n}())\n;","/*!\nWaypoints Inview Shortcut - 4.0.1\nCopyright © 2011-2016 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\n*/\n(function() {\n  'use strict'\n\n  function noop() {}\n\n  var Waypoint = window.Waypoint\n\n  /* http://imakewebthings.com/waypoints/shortcuts/inview */\n  function Inview(options) {\n    this.options = Waypoint.Adapter.extend({}, Inview.defaults, options)\n    this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n    this.waypoints = []\n    this.element = this.options.element\n    this.createWaypoints()\n  }\n\n  /* Private */\n  Inview.prototype.createWaypoints = function() {\n    var configs = {\n      vertical: [{\n        down: 'enter',\n        up: 'exited',\n        offset: '100%'\n      }, {\n        down: 'entered',\n        up: 'exit',\n        offset: 'bottom-in-view'\n      }, {\n        down: 'exit',\n        up: 'entered',\n        offset: 0\n      }, {\n        down: 'exited',\n        up: 'enter',\n        offset: function() {\n          return -this.adapter.outerHeight()\n        }\n      }],\n      horizontal: [{\n        right: 'enter',\n        left: 'exited',\n        offset: '100%'\n      }, {\n        right: 'entered',\n        left: 'exit',\n        offset: 'right-in-view'\n      }, {\n        right: 'exit',\n        left: 'entered',\n        offset: 0\n      }, {\n        right: 'exited',\n        left: 'enter',\n        offset: function() {\n          return -this.adapter.outerWidth()\n        }\n      }]\n    }\n\n    for (var i = 0, end = configs[this.axis].length; i < end; i++) {\n      var config = configs[this.axis][i]\n      this.createWaypoint(config)\n    }\n  }\n\n  /* Private */\n  Inview.prototype.createWaypoint = function(config) {\n    var self = this\n    this.waypoints.push(new Waypoint({\n      context: this.options.context,\n      element: this.options.element,\n      enabled: this.options.enabled,\n      handler: (function(config) {\n        return function(direction) {\n          self.options[config[direction]].call(self, direction)\n        }\n      }(config)),\n      offset: config.offset,\n      horizontal: this.options.horizontal\n    }))\n  }\n\n  /* Public */\n  Inview.prototype.destroy = function() {\n    for (var i = 0, end = this.waypoints.length; i < end; i++) {\n      this.waypoints[i].destroy()\n    }\n    this.waypoints = []\n  }\n\n  Inview.prototype.disable = function() {\n    for (var i = 0, end = this.waypoints.length; i < end; i++) {\n      this.waypoints[i].disable()\n    }\n  }\n\n  Inview.prototype.enable = function() {\n    for (var i = 0, end = this.waypoints.length; i < end; i++) {\n      this.waypoints[i].enable()\n    }\n  }\n\n  Inview.defaults = {\n    context: window,\n    enabled: true,\n    enter: noop,\n    entered: noop,\n    exit: noop,\n    exited: noop\n  }\n\n  Waypoint.Inview = Inview\n}())\n;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","'use strict';\n\n// include npm plugin packages\nwindow.$ = window.jQuery = require('jquery');\nrequire('jquery-easing');\nrequire('slick-carousel');\nwindow.Cookies = require('js-cookie');\nwindow.Leaflet = require('leaflet');\nrequire('waypoints/lib/jquery.waypoints');\nrequire('waypoints/lib/shortcuts/inview');\nwindow.moment = require('moment');\nrequire('moment/locale/nl');\n\n\n// include local plugin packages\nrequire('./plugins/modernizr/modernizr-custom'); // used to check for css animation support\nrequire('./plugins/nivo-lightbox/nivo-lightbox.min');\n// require('./plugins/bootstrap-modules/affix');\n// require('./plugins/bootstrap-modules/scrollspy');\nrequire('./plugins/bootstrap-modules/tooltips');\nrequire('./plugins/bootstrap-modules/tabs');\nrequire('./plugins/bootstrap-modules/popovers');\nwindow.Lightpick = require('./plugins/lightpick');\n\n\nwindow.removeCookie = function(cookie) {\n    Cookies.remove(cookie);\n};\n\nwindow.setCookie = function(cookie,value,expires) {\n    Cookies.set(cookie, value, { expires: expires });\n};\n\nwindow.viewport = function() {\n    let e = window,\n        a = 'inner';\n\n    if (!('innerWidth' in window )) {\n        a = 'client';\n        e = document.documentElement || document.body;\n    }\n\n    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] };\n}\n\n/*\n** Require local packages\n*/\nlet App = require('./lib/dbk-app/app');\n/*\n** Initialize the app.\n** Example: If you have a template called 'templates-examples.php' add it here as: template_examples\n** this code will only get executed on templates-examples.php\n*/\nlet app = new App({\n    global: require('./modules/global'),\n    home: require('./modules/front-page')\n});\njQuery(document).ready(app.loadEvents);","export default __webpack_public_path__ + \"../css/app.css\";"],"names":["module","exports","namespace","self","this","fire","func","args","loadEvents","$","each","document","body","className","replace","split","i","classnm","classFieldDropdownVisible","on","$booking","closest","$dropdown","siblings","length","hasClass","removeClass","find","addClass","e","target","arrival","departure","$form","$arrivalLabel","$departureLabel","checkinDate","moment","footerHTML","html","Lightpick","field","secondField","repick","numberOfColumns","numberOfMonths","minDate","dropdowns","years","min","get","max","add","months","footer","onDayRender","div","date","onOpen","onSelect","start","end","toDate","text","format","onClose","submit","preventDefault","form","mews_id","val","locale","Mews","Distributor","configurationIds","distributor","setLanguageCode","console","log","setStartDate","setEndDate","open","showRooms","$link","classShowTooltip","string","dummyInput","createElement","setAttribute","style","position","top","value","appendChild","focus","select","range","createRange","selectNodeContents","selection","window","getSelection","removeAllRanges","addRange","setSelectionRange","execCommand","err","error","removeChild","copyToClipboard","location","href","setTimeout","$toggle","$item","toggledClass","$content","stop","slideUp","slideDown","show","require","$body","$header","navigator","appName","userAgent","match","browser","msie","gtm_event","data","page_url","attr","dataLayer","push","click","blur","nivoLightbox","afterShowLightbox","$iframe","src","tooltip","selector","container","popover","trigger","template","$this","scrollOffset","viewport","width","outerHeight","targetMargin","parseInt","css","$target","height","animate","scrollTop","offset","search","indexOf","hide","prepend","wrap","$wrapper","classToggled","$player","prop","$settings","classDropdownVisible","insertBefore","$parent","$submenu","jQuery","ready","append","$submit","$heading","$description","size","$overlay","classOverlayHidden","cookieHash","cookieDuration","Cookies","remove","setCookie","mews_forms","mews_form","dataBaseUrl","$bar","$menu","$search","setBarHeight","barHeight","$targetLabel","$controlMinus","$controlPlus","$sum","$sumLabel","sumValue","$button","newValue","toggle_menu","hide_menu","toggle_search","hide_search","keyup","keyCode","$parallax","event","objLeft","left","objTop","objCenterX","outerWidth","objCenterY","xPer","pageX","yPer","pageY","xMove","yMove","classPopinVisible","$popin","popinID","reverse","delay","duration","resizeVideo","$video","availableWidth","availableHeight","videoHeight","videoWidth","parent","Waypoint","Inview","element","enter","ScrollMagicPluginGsap","ScrollMagic","gsap","pathPrepare","$el","lineLength","getTotalLength","$routeSlotermeer","$routeRembrandtpark","$routeCityCentre","$routeLelylaan","$routeVondelpark","$routeLeidseplein","$routeRijksmuseum","$routeCentraal","controller","timeline","TimelineMax","from","autoAlpha","y","ease","Power3","easeOut","to","strokeDashoffset","easeInOut","scene","triggerElement","triggerHook","setTween","setPin","addScene","classButtonVisible","scrolledDistance","showTrigger","hideTrigger","slick","rows","arrows","prevArrow","nextArrow","dots","infinite","speed","slidesToShow","slidesToScroll","swipeToSlide","centerMode","adaptiveHeight","cssEase","lazyLoad","customPaging","index","responsive","breakpoint","settings","centerPadding","$slider","prevAll","fade","classGalleryThumbActive","slideIndex","autoplay","autoplaySpeed","mobileFirst","classHeaderSticky","classHeaderVisible","headerVisibleTreshold","$nav","classNavSticky","setPageNavClass","classPageNavOverflow","$active","$scrollContainer","scrollLeft","diff","$tabs","$activeTab","$activeMobileTab","tabID","classTabActive","classMobileTabActive","Error","t","o","fn","jquery","init","VERSION","DEFAULTS","extend","Constructor","placement","content","prototype","constructor","getDefaults","setContent","tip","getTitle","getContent","options","children","detach","hasContent","$element","call","arrow","$arrow","r","n","test","noConflict","a","TRANSITION_DURATION","Event","relatedTarget","s","isDefaultPrevented","activate","type","offsetWidth","support","transition","one","emulateTransitionEnd","tab","enabled","timeout","hoverState","inState","animation","title","padding","getOptions","$viewport","isFunction","hover","proxy","toggle","l","leave","_options","fixTitle","getDelegateOptions","currentTarget","clearTimeout","isInStateTrue","contains","ownerDocument","documentElement","getUID","p","display","appendTo","insertAfter","h","getPosition","f","u","offsetHeight","c","d","bottom","right","v","getCalculatedOffset","applyPlacement","g","$tip","isNaN","setOffset","using","Math","round","getViewportAdjustedDelta","replaceArrow","removeAttr","tagName","getBoundingClientRect","scroll","random","getElementById","enable","disable","toggleEnabled","destroy","off","removeData","define","defaults","firstDay","parentEl","lang","separator","singleDate","autoclose","startDate","endDate","maxDate","disableDates","selectForward","selectBackward","minDays","maxDays","hoveringTooltip","hideOnBodyClick","disabledDatesInRange","tooltipNights","orientation","disableWeekends","inline","buttons","prev","next","close","reset","apply","other","tooltipOnDisabled","pluralize","onRender","onError","renderTopButtons","opts","weekdayName","day","short","Date","toLocaleString","weekday","renderDay","dummy","extraClass","prevMonth","subtract","nextMonth","time","valueOf","Array","Object","toString","filter","el","concat","_from","_to","isValid","isBetween","isSame","isAfter","isSameOrAfter","isSameOrBefore","tempStartDate","repickTrigger","isBefore","isoWeekday","splice","join","innerHTML","outerHTML","renderMonthsList","idx","set","option","getMonth","month","dir","disabled","renderYearsList","minYear","maxYear","Number","getFullYear","renderCalendar","monthDate","calendar","w","prevDays","daysInMonth","nextDays","querySelector","updateDates","days","querySelectorAll","forEach","getAttribute","checkDisabledDatesInRange","disabledArray","map","entry","closestPrev","sort","b","closestNext","dayCell","classList","config","Node","parentNode","_onMouseDown","isShowing","srcElement","stopPropagation","_opts","dispatchEvent","visibility","swapDate","footerMessage","not_allowed_range","_onMouseEnter","showTooltip","hideTooltip","hoverDate","dt","abs","pluralText","_onChange","gotoMonth","gotoYear","_onInputChange","gotoDate","syncFields","_onInputFocus","_onInputClick","_onClick","hasParentEl","dayBounding","pickerBouding","_left","_top","textContent","tooltipBounding","addEventListener","assign","nodeName","browserLang","language","userLanguage","innerWidth","dates","tmp","setDateRange","gotoToday","year","updatePosition","rect","calRect","pageYOffset","innerHeight","pageXOffset","preventOnSelect","dateISO","ISO_8601","dateOptFormat","getStartDate","getEndDate","setDate","setDisableDates","getDate","activeElement","removeEventListener","reloadOptions","factory","arguments","x","createElementNS","toUpperCase","fake","id","styleSheet","cssText","createTextNode","background","overflow","_","getComputedStyle","getPropertyValue","currentStyle","m","toLowerCase","CSS","supports","N","modElem","shift","charAt","slice","P","z","C","S","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","addTest","name","addAsyncTest","Modernizr","_cssomPrefixes","_domPrefixes","E","elem","unshift","testAllProps","hasOwnProperty","aliases","Boolean","baseVal","RegExp","T","_defaults","_name","effect","theme","keyboardNav","clickOverlayToClose","onInit","beforeShowLightbox","beforeHideLightbox","afterHideLightbox","onPrev","onNext","errorMessage","showLightbox","which","destructLightbox","checkContent","constructLightbox","processContent","eq","last","first","substring","isHidpi","resize","complete","load","frameborder","vspace","hspace","scrolling","ajax","url","cache","success","clone","empty","devicePixelRatio","matchMedia","matches","AttrPlugin","_gsScope","propName","API","version","tween","_addTween","_overwriteProps","_RAD2DEG","PI","_r1","_r2","_r3","_corProps","_globals","Segment","da","ca","ba","cubicToQuadratic","q1","q2","q3","q4","mab","mbc","mcd","mabc","mbcd","m8","_calculateControlPoints","curviness","quad","basic","correlate","p1","p2","p3","seg","m1","m2","mm","cp2","qb","r1","r2","tl","ii","cp1","_parseAnchors","values","substr","bezierThrough","quadratic","j","seamless","obj","props","sqrt","_addCubicLengths","steps","resolution","d1","inv","bez","inc","BezierPlugin","priority","global","vars","_target","_func","_mod","_props","_timeRes","timeResolution","isFunc","second","autoRotate","orientToBezier","_autoRotate","parseFloat","_beziers","cur","cnt","soft","_parseBezierData","_segCount","ld","lengths","total","threshold","segments","curLS","_parseLengthData","_length","_lengths","_segments","_l1","_li","_s1","_si","_l2","_curSeg","_s2","_prec","_initialRotations","_startRatio","runBackwards","curIndex","curSeg","v1","notStart","b2","x1","y1","x2","y2","conv","ar","atan2","_autoCSS","quadraticToCubic","_cssRegister","CSSPlugin","_internals","_parseToProxy","_setPluginRatio","CSSPropTween","_registerComplexSpecialProp","parser","cssp","pt","plugin","pluginValues","setRatio","_transform","_enableTransforms","_gsTransform","rotation","_onInitTween","_tween","lookup","op","_kill","_super","_hasPriority","_suffixMap","_cs","TweenPlugin","_specialProps","defaultTransformPerspective","defaultSkewType","defaultSmoothOrigin","suffixMap","fontSize","margin","perspective","lineHeight","_autoRound","_reqSafariFix","_isSafari","_isFirefox","_isSafariLT6","_ieVers","_index","_numExp","_relNumExp","_valuesExp","_valuesExpWithCommas","_NaNExp","_suffixExp","_opacityExp","_opacityValExp","_alphaFilterExp","_rgbhslExp","_capsExp","_camelExp","_urlExp","_camelFunc","_horizExp","_ieGetMatrixExp","_ieSetMatrixExp","_commasOutsideParenExp","_complexExp","_DEG2RAD","_forcePT","_dummyElement","_doc","_createElement","ns","_tempDiv","_tempImg","_agent","_supportsOpacity","exec","$1","opacity","_getIEOpacity","_log","_prefixCSS","_prefix","_checkPropPrefix","undefined","_computedStyleScope","defaultView","_getComputedStyle","_getStyle","getStyle","cs","calc","dflt","rv","_convertToPixels","convertToPixels","sfx","recurse","pix","horiz","node","neg","precise","clientWidth","clientHeight","_gsCache","cacheWidths","_calculateOffset","calculateOffset","dim","_getAllStyles","tr","_transformPropCSS","_transformProp","_getTransform","skewX","scaleX","scaleY","_supports3D","rotationX","rotationY","scaleZ","filters","_cssDif","s1","s2","forceLookup","mpt","difs","MiniPropTween","firstMPT","_dimensions","_margins","_getDimension","getCTM","_isSVG","getBBox","_parsePosition","recObj","oxp","oyp","oxr","oyr","ox","oy","_parseChange","_parseVal","isRelative","_parseAngle","directionalEnd","cap","dif","result","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","fuchsia","olive","yellow","orange","gray","purple","green","red","pink","cyan","transparent","_hue","_parseColor","parseColor","toHSL","wasHSL","_formatColors","color","temp","colors","_colorExp","charIndex","parsed","colorStringFilter","combined","lastIndex","_getFormatter","clr","collapsible","multi","formatter","dColor","dVals","pfx","delim","numVals","dSfx","vals","_getEdgeParser","parse","str","_next","mod","xs0","xs1","_prev","shallow","xp","firstPT","bpt","transform","oldForce","rxp","pr","_addNonTweeningNumericPT","overwriteProp","_parseComplex","parseComplex","clrs","xi","ni","bv","ev","bnums","enums","bn","hasAlpha","cv","useHSL","ea","autoRound","appendXtra","xfirst","pad","SpecialProp","prefix","defaultValue","keyword","allowFunc","_registerPluginProp","pluginName","pluginClass","com","greensock","plugins","bi","ei","kwd","registerSpecialProp","onInitTween","useSVGTransformAttr","_useSVGTransformAttr","svg","force","_transformProps","_transformOriginProp","Transform","force3D","defaultForce3D","_SVGElement","_createSVG","attributes","reg","setAttributeNS","_docElement","_forceSVGTransformAttr","_parseSVGOrigin","local","decoratee","absolute","smoothOrigin","skipRecord","xOrigin","yOrigin","tx","ty","determinant","xOriginOld","yOriginOld","tm","_getMatrix","hasAttribute","_identity2DMatrix","xOffset","yOffset","_getBBoxHack","swapIfPossible","bbox","ownerSVGElement","oldParent","oldSibling","nextSibling","oldCSS","_originalGetBBox","_getBBox","force2D","isDefault","dec","rnd","offsetParent","_removeProp","consolidate","matrix","getTransform","rec","invX","zOrigin","t1","t2","t3","cos","sin","a11","a21","a31","a41","a12","a22","a32","a42","a13","a23","a33","a14","a24","a34","a43","angle","skewType","k","removeAttribute","_setIETransformRatio","ang","skew","dx","dy","clip","xPercent","yPercent","marg","mult","ieOffsetX","ieOffsetY","_setTransformRatio","set3DTransformRatio","setTransformRatio","comma","zero","sx","sy","sz","isSVG","skewY","_totalTime","_totalDuration","tan","parsingProp","_lastParsedTransform","scaleFunc","scale","copy","has3D","hasChange","dr","originalGSTransform","endRotations","transformOriginString","parseTransform","orig","rotationZ","transformOrigin","svgOrigin","transformPerspective","directionalRotation","shortRotation","shortRotationX","shortRotationY","_transformType","ea1","es2","bs2","bs","es","en","esfx","bsfx","rel","hn","vn","em","pct","overlap","bp","backgroundPositionX","backgroundPositionY","clipTop","clipRight","clipBottom","clipLeft","bw","_setIEOpacityRatio","skip","xn1","isAutoAlpha","zoom","removeProperty","_setClassNameRatio","_gsClassPT","difData","cnpt","cnptLookup","_classNamePT","_setClearPropsRatio","clearTransform","transformParse","_firstPT","nodeType","_vars","pt2","zIndex","tpt","threeD","_addLazySet","WebkitBackfaceVisibility","_linkCSSP","pop","sp","isStr","_propLookup","strictUnits","_time","_duration","_rawPrevTime","xs2","xn2","xs3","xn3","xs4","xn4","xs5","lazySet","alpha","_getChildStyles","targets","child","childNodes","cascadeTo","results","_reservedProps","_targets","render","_enabled","globals","DirectionalRotationPlugin","finals","useRadians","ratio","SteppedEase","ExpoScaleEase","RoughEase","_createElastic","gs","_2PI","_HALF_PI","_class","_create","Ease","getRatio","_easeReg","_wrap","EaseOut","EaseIn","EaseInOut","easeIn","EasePoint","gap","_createBack","overshoot","_p1","_p2","Back","SlowMo","linearRatio","power","yoyoMode","_p","_p3","_calcEnd","immediateStart","_ease","exp","bump","pnt","taper","points","randomize","clamp","strength","invert","def","amplitude","period","asin","pow","Elastic","Bounce","Circ","Expo","Sine","RoundPropsPlugin","_getRoundFunc","_roundLinkedList","blob","_onInitAllProps","rp","roundProps","rpt","pg","_add","TimelineLite","SimpleTimeline","_labels","autoRemoveChildren","smoothChildTiming","_sortChildren","_onUpdate","onUpdate","_isArray","_swapSelfInParams","tweens","align","stagger","_tinyNum","TweenLiteInternals","_isSelector","isSelector","isArray","_lazyTweens","lazyTweens","_lazyRender","lazyRender","_copy","_applyCycle","alt","cycle","_pauseCallback","pauseCallback","_defaultImmediateRender","toVars","fromVars","defaultFalse","ir","_distribute","base","isFromKeyword","axis","center","originX","originY","distances","grid","Infinity","amount","distribute","kill","_gc","_forcingPlayhead","_hasPause","Engine","repeat","TweenMax","fromTo","staggerTo","onCompleteAll","onCompleteAllParams","onCompleteAllScope","onComplete","onCompleteParams","callbackScope","staggerFunc","startAt","_slice","staggerFrom","staggerFromTo","callback","params","scope","exportRoot","ignoreDelayedCalls","hasNegativeStart","root","_timeline","_remove","_startTime","_first","_delay","totalDuration","curTime","beforeRawTime","_parseTimeOrLabel","Animation","_timeScale","_uncache","addLabel","_initted","rawTime","_paused","totalTime","useFrames","_pauseTime","_reversed","removeLabel","skipDisable","_last","offsetOrLabel","insert","insertMultiple","appendMultiple","label","addPause","onReverseComplete","getLabelTime","timeOrLabel","appendIfAbsent","ignore","clippedDuration","recent","endTime","seek","suppressEvents","paused","gotoAndPlay","play","gotoAndStop","pause","isComplete","internalForce","pauseTween","pauseTime","prevTime","totalDur","_dirty","prevStart","prevTimeScale","prevPaused","_hasPausedChild","_active","onStart","_callback","getChildren","nested","timelines","ignoreBeforeTime","getTweensOf","_contains","_recent","shiftChildren","adjustLabels","labels","changed","clear","invalidate","ignoreTimeline","uncapped","timeScale","_calculatingDuration","usesFrames","wrapRepeats","_repeat","totalProgress","_repeatDelay","repeatDelay","_cycle","_yoyo","yoyo","_easeNone","addCallback","removeCallback","removePause","tweenTo","immediateRender","lazy","isFromTo","onStartScope","onStartParams","tweenFromTo","fromPosition","toPosition","cycleDuration","dur","prevTotalTime","prevRawPrevTime","prevCycle","_locked","backwards","recTotalTime","recCycle","recRawPrevTime","recTime","onRepeat","getActive","all","isActive","getLabelAfter","getLabelsArray","getLabelBefore","progress","cycleDur","currentLabel","TweenLite","_exports","GreenSockGlobals","_ticker","_tickerActive","array","_namespace","_emptyFunc","_defLookup","Definition","dependencies","sc","gsClass","_classes","check","cl","missing","_gsDefine","_baseParams","extraParams","_type","_power","_params","_easeMap","register","names","types","create","na","ta","easing","pw","linear","Linear","swing","Quad","EventDispatcher","_listeners","_eventTarget","useParam","listener","list","wake","up","_reqAnimFrame","requestAnimationFrame","_cancelAnimFrame","cancelAnimationFrame","_getTime","now","getTime","_lastUpdate","fps","useRAF","_fps","_req","_id","_gap","_nextTime","_self","_useRAF","_lagThreshold","_adjustedLag","_tick","manual","dispatch","elapsed","frame","tick","lagSmoothing","adjustedLag","sleep","visibilityState","Ticker","events","reversed","_rootTimeline","_rootFramesTimeline","ticker","_checkTimeout","unref","atTime","resume","restart","includeDelay","startTime","includeSelf","eventCallback","includeRepeats","raw","prevTween","st","targ","overwrite","_overwrite","_overwriteLookup","defaultOverwrite","_siblings","_register","_applyOverwrite","_overwrittenProps","_startAt","_notifyPluginsOfEnabled","_lazy","defaultEase","autoSleep","_lazyLookup","_numbersExp","_relExp","_setRatio","fp","_blobRound","_blobDif","startNums","endNums","num","nonNumbers","currentNum","_applyPT","_addPropTween","funcParam","stringFilter","getterName","defaultStringFilter","blobDif","_plugins","_tweenLookup","tweenLookup","_tweenLookupNum","reservedProps","onCompleteScope","onUpdateParams","onUpdateScope","onReverseCompleteParams","onReverseCompleteScope","onRepeatParams","onRepeatScope","easeParams","autoCSS","onOverwrite","yoyoEase","none","auto","concurrent","allOnStart","preexisting","_nextGCFrame","_updateRoot","scrub","_gsTweenID","_onOverwrite","overwrittenTween","overwritingTween","killedProps","mode","curTween","globalStart","overlaps","oCount","zeroDur","_checkOverlap","reference","ts","_init","initPlugins","startVars","immediate","_easeType","_easePower","_initProps","_onPluginEvent","propLookup","overwrittenProps","_priority","_onDisable","_onEnable","rawPrevTime","killProps","record","killed","simultaneousOverwrite","_tempKill","delayedCall","onlyActive","killTweensOf","killDelayedCallsTo","_propName","_roundProps","overwriteProps","initAll","Plugin","_gsQueue","nonGlobals","core","Power0","Power1","Power2","Power4","_autoActivated","_blankArray","_yoyoEase","updateTo","resetDuration","curRatio","endValue","allTo","fromCycle","allFrom","allFromTo","isTweening","_getChildrenOf","includeTimelines","getAllTweens","killAll","delayedCalls","isDC","allTrue","killChildTweensOf","curParent","_changePause","pauseAll","resumeAll","globalTimeScale","TweenMaxBase","a0","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","noGlobal","arr","getProto","getPrototypeOf","flat","class2type","hasOwn","fnToString","ObjectFunctionString","item","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","code","doc","script","head","toType","context","isArrayLike","toArray","pushStack","elems","ret","merge","prevObject","even","grep","_elem","odd","len","copyIsArray","deep","isPlainObject","expando","isReady","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","inArray","callbackExpect","arg","guid","Symbol","iterator","_i","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","booleans","whitespace","identifier","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","els","seed","nid","groups","newSelector","newContext","getElementsByTagName","getElementsByClassName","qsa","testContext","toSelector","qsaError","keys","key","cacheLength","markFunction","assert","addHandle","attrs","handler","attrHandle","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","expr","elements","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","matched","matcher","unmatched","elemLang","hash","hasFocus","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","tokens","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","unique","isXMLDoc","escapeSelector","until","truncate","is","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","contents","sibling","has","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","once","stopOnFalse","lock","fireWith","Deferred","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","warn","message","readyException","readyList","completed","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","acceptData","owner","Data","uid","defineProperty","configurable","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","getData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","adjusted","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","wrapMap","thead","col","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","ignored","attached","fragment","nodes","htmlPrefilter","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopImmediatePropagation","handleObjIn","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","enumerable","originalEvent","writable","noBubble","beforeunload","returnValue","defaultPrevented","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","shiftKey","view","charCode","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","mouseenter","mouseleave","pointerenter","pointerleave","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","before","after","replaceWith","replaceChild","prependTo","replaceAll","original","rnumnonpx","rcustomProp","getStyles","opener","swap","old","rboxStyle","rtrimCSS","curCSS","computed","minWidth","maxWidth","isCustomProp","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","cssHooks","origName","setProperty","isFinite","scrollboxSizeBuggy","border","suffix","expand","expanded","parts","propHooks","run","percent","eased","pos","step","fx","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","createFxNow","genFx","includeWidth","createTween","tweeners","properties","stopped","prefilters","currentTime","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","opt","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","bool","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","classNames","curValue","finalValue","toggleClass","stateVal","isValidValue","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","animated","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","win","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","fnOver","fnOut","holdReady","hold","parseJSON","isNumeric","trim","_jQuery","_$","OldCookies","api","decode","decodeURIComponent","converter","path","expires","toUTCString","stringify","write","stringifiedAttributes","attributeName","cookie","jar","cookies","read","withConverter","create$2","F","lastId","stamp","_leaflet_id","throttle","wrapperFn","later","wrapNum","includeMax","falseFn","formatNum","precision","splitWords","setOptions","getParamString","existingUrl","uppercase","templateRe","emptyImageUrl","getPrefixed","lastTime","timeoutDefer","timeToCall","requestFn","cancelFn","requestAnimFrame","cancelAnimFrame","Util","__proto__","Class","checkDeprecatedMixinEvents","includes","L","Mixin","Events","NewClass","initialize","callInitHooks","parentProto","__super__","statics","_initHooks","_initHooksCalled","include","parentOptions","mergeOptions","addInitHook","_on","_off","removeAll","_events","_once","_listens","newListener","ctx","listeners","_firingCount","propagate","listens","sourceTarget","_propagateEvent","_fn","_eventParents","addEventParent","removeEventParent","layer","propagatedFrom","clearAllEventListeners","addOneTimeEventListener","fireEvent","hasEventListeners","Evented","Point","trunc","floor","toPoint","Bounds","toBounds","LatLngBounds","corner1","corner2","latlngs","toLatLngBounds","LatLng","lat","lng","toLatLng","lon","point","_subtract","divideBy","_divideBy","multiplyBy","_multiplyBy","scaleBy","unscaleBy","_round","_floor","_ceil","_trunc","distanceTo","equals","min2","max2","getCenter","getBottomLeft","getTopRight","getTopLeft","getBottomRight","getSize","intersects","bounds","xIntersects","yIntersects","xOverlaps","yOverlaps","bufferRatio","heightBuffer","widthBuffer","sw2","ne2","sw","_southWest","ne","_northEast","getSouthWest","getNorthEast","getNorthWest","getNorth","getWest","getSouthEast","getSouth","getEast","latIntersects","lngIntersects","latOverlaps","lngOverlaps","toBBoxString","maxMargin","Earth","distance","wrapLatLng","sizeInMeters","latAccuracy","lngAccuracy","CRS","latLngToPoint","latlng","projectedPoint","projection","project","transformation","pointToLatLng","untransformedPoint","untransform","unproject","LN2","getProjectedBounds","wrapLng","wrapLat","wrapLatLngBounds","newCenter","latShift","lngShift","R","latlng1","latlng2","rad","lat1","lat2","sinDLat","sinDLon","earthRadius","SphericalMercator","MAX_LATITUDE","atan","Transformation","_a","_b","_c","_d","toTransformation","EPSG3857","EPSG900913","svgCreate","pointsToPath","rings","closed","len2","Browser","ie","ielt9","edge","webkit","userAgentContains","android","android23","webkitVer","androidStock","opera","chrome","gecko","safari","phantom","opera12","platform","ie3d","webkit3d","WebKitCSSMatrix","gecko3d","any3d","L_DISABLE_3D","mobile","mobileWebkit","mobileWebkit3d","msPointer","PointerEvent","MSPointerEvent","pointer","touchNative","TouchEvent","touch","L_NO_TOUCH","mobileOpera","mobileGecko","retina","screen","deviceXDPI","logicalXDPI","passiveEvents","supportsPassiveOption","canvas$1","getContext","svg$1","createSVGRect","inlineSvg","vml","shape","behavior","adj","mac","linux","canvas","POINTER_DOWN","POINTER_MOVE","POINTER_UP","POINTER_CANCEL","pEvent","touchstart","touchmove","touchend","touchcancel","_onPointerStart","_handlePointer","_pointers","_pointerDocListener","addPointerListener","_addPointerDocListener","removePointerListener","_globalPointerDown","_globalPointerMove","_globalPointerUp","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","makeDblclick","newEvent","isTrusted","_simulated","addDoubleTapListener","simDblclick","sourceCapabilities","firesTouchEvents","getPropagationPath","some","HTMLLabelElement","for","HTMLInputElement","HTMLSelectElement","dblclick","removeDoubleTapListener","disableTextSelection","enableTextSelection","_userSelect","_outlineElement","_outlineStyle","TRANSFORM","testProp","TRANSITION","TRANSITION_END","create$1","toFront","toBack","classes","setClass","correspondingElement","setOpacity","_setOpacityIE","filterName","Enabled","Opacity","setTransform","setPosition","_leaflet_pos","userSelectProperty","disableImageDrag","enableImageDrag","preventOutline","restoreOutline","outline","getSizedParentNode","getScale","boundingClientRect","DomUtil","addOne","eventsKey","batchRemove","removeOne","filterFn","mouseSubst","wheel","originalHandler","passive","isExternalTarget","detachEvent","_stopped","cancelBubble","disableScrollPropagation","disableClickPropagation","composedPath","getMousePosition","clientLeft","clientTop","wheelPxFactor","getWheelDelta","wheelDeltaY","deltaY","deltaMode","deltaX","deltaZ","wheelDelta","DomEvent","addListener","removeListener","PosAnimation","newPos","easeLinearity","_el","_inProgress","_easeOutPower","_startPos","_offset","_animate","_step","_complete","_animId","_runFrame","_easeOut","Map","crs","minZoom","maxZoom","layers","maxBounds","renderer","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","transform3DLimit","zoomSnap","zoomDelta","trackResize","_handlers","_layers","_zoomBoundLayers","_sizeChanged","_initContainer","_initLayout","_onResize","_initEvents","setMaxBounds","_zoom","_limitZoom","setView","_zoomAnimated","_createAnimProxy","_proxy","_catchTransitionEnd","_addLayers","_limitCenter","_stop","_loaded","pan","_tryAnimatedZoom","_tryAnimatedPan","_sizeTimer","_resetView","noMoveStart","setZoom","zoomIn","zoomOut","setZoomAround","getZoomScale","viewHalf","centerOffset","latLngToContainerPoint","containerPointToLatLng","_getBoundsCenterZoom","getBounds","paddingTL","paddingTopLeft","paddingBR","paddingBottomRight","getBoundsZoom","paddingOffset","swPoint","nePoint","fitBounds","fitWorld","panTo","panBy","getZoom","_panAnim","_onPanTransitionStep","_onPanTransitionEnd","_mapPane","_getMapPanePos","_rawPanBy","flyTo","targetCenter","targetZoom","startZoom","w0","w1","u1","rho","rho2","sq","sinh","cosh","tanh","r0","_flyToFrame","_move","getScaleZoom","_moveEnd","_moveStart","flyToBounds","_panInsideMaxBounds","setMinZoom","oldZoom","setMaxZoom","panInsideBounds","_enforcingBounds","panInside","pixelCenter","pixelPoint","pixelBounds","getPixelBounds","paddedBounds","paddedSize","invalidateSize","oldSize","_lastCenter","newSize","oldCenter","debounceMoveend","locate","_locateOptions","watch","_handleGeolocationError","onResponse","_handleGeolocationResponse","_locationWatchId","geolocation","watchPosition","getCurrentPosition","stopLocate","clearWatch","_container","coords","latitude","longitude","accuracy","timestamp","addHandler","HandlerClass","_containerId","_clearControlPos","_resizeRequest","_clearHandlers","_panes","_renderer","createPane","pane","_checkIfLoaded","_moved","layerPointToLatLng","_getCenterLayerPoint","getMinZoom","_layersMinZoom","getMaxZoom","_layersMaxZoom","inside","nw","se","boundsSize","snap","scalex","scaley","_size","topLeftPoint","_getTopLeftPoint","getPixelOrigin","_pixelOrigin","getPixelWorldBounds","getPane","getPanes","getContainer","toZoom","fromZoom","latLngToLayerPoint","containerPointToLayerPoint","layerPointToContainerPoint","layerPoint","mouseEventToContainerPoint","mouseEventToLayerPoint","mouseEventToLatLng","_onScroll","_fadeAnimated","_initPanes","_initControlPos","panes","_paneRenderers","markerPane","shadowPane","loading","zoomChanged","supressEvent","_getNewPixelOrigin","pinch","_getZoomSpan","onOff","_handleDOMEvent","_onMoveEnd","_findEventTargets","isHover","dragging","_draggableMoved","_isClickDisabled","_fireDOMEvent","_mouseEvents","canvasTargets","synth","filtered","isMarker","getLatLng","_radius","containerPoint","bubblingMouseEvents","moved","boxZoom","whenReady","_latLngToNewLayerPoint","topLeft","_latLngBoundsToNewLayerBounds","latLngBounds","_getCenterOffset","centerPoint","viewBounds","_getBoundsOffset","_limitOffset","newBounds","pxBounds","projectedMaxBounds","minOffset","maxOffset","_rebound","mapPane","_animatingZoom","_onZoomTransitionEnd","_animMoveEnd","_destroyAnimProxy","propertyName","_nothingToAnimate","_animateZoom","startAnim","noUpdate","_animateToCenter","_animateToZoom","_tempFireZoomEvent","createMap","Control","_map","removeControl","addControl","addTo","onAdd","corner","_controlCorners","onRemove","_refocusOnMap","control","corners","_controlContainer","createCorner","vSide","hSide","Layers","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","layerA","layerB","nameA","nameB","baseLayers","overlays","_layerControlInputs","_lastZIndex","_handlingClick","_addLayer","_update","_checkDisabledLayers","_onLayerChange","_expandIfNotCollapsed","addBaseLayer","addOverlay","removeLayer","_getLayer","_section","acceptableHeight","offsetTop","collapse","section","link","_layersLink","_baseLayersList","_separator","_overlaysList","overlay","setZIndex","baseLayersPresent","overlaysPresent","baseLayersCount","_addItem","_createRadioElement","radioHtml","radioFragment","hasLayer","defaultChecked","layerId","holder","inputs","addedLayers","removedLayers","addLayer","Zoom","zoomInText","zoomInTitle","zoomOutText","zoomOutTitle","zoomName","_zoomInButton","_createButton","_zoomIn","_zoomOutButton","_zoomOut","_updateDisabled","_disabled","zoomControl","Scale","metric","imperial","_addScales","updateWhenIdle","_mScale","_iScale","maxMeters","_updateScales","_updateMetric","_updateImperial","meters","_getRoundNum","_updateScale","maxMiles","miles","feet","maxFeet","pow10","ukrainianFlag","Attribution","_attributions","attributionControl","getAttribution","addAttribution","_addAttribution","removeAttribution","setPrefix","attribs","prefixAndAttribs","attribution","Handler","addHooks","removeHooks","_lastCode","START","Draggable","clickTolerance","dragStartTarget","_element","_dragStartTarget","_preventOutline","_onDown","_dragging","finishDrag","_moving","sizedParent","_startPoint","_parentScale","mouseevent","_onMove","_onUp","_lastTarget","SVGElementInstance","correspondingUseElement","_newPos","_lastEvent","_updatePosition","noInertia","simplify","tolerance","sqTolerance","_simplifyDP","_reducePoints","pointToSegmentDistance","_sqClosestPointOnSegment","closestPointOnSegment","markers","Uint8Array","_simplifyDPStep","newPoints","sqDist","maxSqDist","reducedPoints","_sqDist","clipSegment","useLastCode","codeOut","newCode","codeA","_getBitCode","codeB","_getEdgeIntersection","dot","isFlat","_flat","polylineCenter","halfDist","segDist","dist","LineUtil","clipPolygon","clippedPoints","edges","_code","polygonCenter","area","PolyUtil","LonLat","Mercator","R_MINOR","con","phi","dphi","EPSG3395","EPSG4326","Simple","Layer","removeFrom","_mapToAdd","addInteractiveTarget","targetEl","removeInteractiveTarget","_layerAdd","getEvents","beforeAdd","eachLayer","_addZoomLimit","_updateZoomLevels","_removeZoomLimit","oldZoomSpan","LayerGroup","getLayerId","clearLayers","invoke","methodName","getLayer","getLayers","layerGroup","FeatureGroup","setStyle","bringToFront","bringToBack","featureGroup","Icon","popupAnchor","tooltipAnchor","crossOrigin","createIcon","oldIcon","_createIcon","createShadow","_getIconUrl","img","_createImg","_setIconStyles","sizeOption","anchor","shadowAnchor","iconAnchor","marginTop","icon","IconDefault","iconUrl","iconRetinaUrl","shadowUrl","iconSize","shadowSize","imagePath","_detectIconPath","_stripUrl","strip","re","MarkerDrag","marker","_marker","_icon","_draggable","dragstart","_onDragStart","predrag","_onPreDrag","drag","_onDrag","dragend","_onDragEnd","_adjustPan","autoPanSpeed","autoPanPadding","iconPos","origin","panBounds","movement","_panRequest","_oldLatLng","closePopup","autoPan","shadow","_shadow","_latlng","oldLatLng","Marker","interactive","keyboard","zIndexOffset","riseOnHover","riseOffset","autoPanOnFocus","draggable","_initIcon","update","_removeIcon","_removeShadow","viewreset","setLatLng","setZIndexOffset","getIcon","setIcon","_popup","bindPopup","getElement","_setPos","classToAdd","addIcon","mouseover","_bringToFront","mouseout","_resetZIndex","_panOnFocus","newShadow","addShadow","_updateOpacity","_initInteraction","_zIndex","_updateZIndex","iconOpts","_getPopupAnchor","_getTooltipAnchor","Path","stroke","weight","lineCap","lineJoin","dashArray","dashOffset","fill","fillColor","fillOpacity","fillRule","getRenderer","_initPath","_reset","_addPath","_removePath","redraw","_updatePath","_updateStyle","_updateBounds","_bringToBack","_path","_project","_clickTolerance","CircleMarker","radius","setRadius","getRadius","_point","_radiusY","_pxBounds","_updateCircle","_empty","_bounds","_containsPoint","circleMarker","Circle","legacyOptions","_mRadius","half","latR","lngR","acos","circle","Polyline","smoothFactor","noClip","_setLatLngs","getLatLngs","_latlngs","setLatLngs","isEmpty","closestLayerPoint","minDistance","minPoint","jLen","_parts","_defaultShape","addLatLng","_convertLatLngs","_rings","_projectLatlngs","_rawPxBounds","projectedBounds","ring","_clipPoints","segment","_simplifyPoints","_updatePoly","part","polyline","Polygon","clipped","polygon","GeoJSON","geojson","addData","feature","features","geometries","geometry","coordinates","geometryToLayer","asFeature","defaultOptions","resetStyle","onEachFeature","_setLayerStyle","pointToLayer","_coordsToLatLng","coordsToLatLng","_pointToLayer","coordsToLatLngs","geoLayer","featureLayer","pointToLayerFn","markersInheritOptions","levelsDeep","latLngToCoords","latLngsToCoords","getFeature","newGeometry","PointToGeoJSON","toGeoJSON","geoJSON","holes","toMultiPoint","isGeometryCollection","jsons","geoJson","ImageOverlay","errorOverlayUrl","_url","_image","_initImage","styleOpts","setUrl","setBounds","zoomanim","wasElementSupplied","onselectstart","onmousemove","_overlayOnError","errorUrl","imageOverlay","VideoOverlay","loop","keepAspectRatio","muted","playsInline","vid","onloadeddata","sourceElements","sources","videoOverlay","video","SVGOverlay","svgOverlay","DivOverlay","_source","_content","openOn","_prepareOpen","_removeTimeout","_updateContent","_updateLayout","isOpen","_contentNode","hasChildNodes","_getAnchor","_containerBottom","_containerLeft","_containerWidth","_initOverlay","OverlayClass","Popup","maxHeight","autoPanPaddingTopLeft","autoPanPaddingBottomRight","keepInView","closeButton","autoClose","closeOnEscapeKey","popup","closeOnClick","closePopupOnClick","preclick","moveend","wrapper","_wrapper","_tipContainer","_tip","_closeButton","whiteSpace","scrolledClass","marginBottom","containerHeight","containerWidth","layerPos","containerPos","openPopup","_popupHandlersAdded","_openPopup","keypress","_onKeyPress","move","_movePopup","unbindPopup","togglePopup","isPopupOpen","setPopupContent","getPopup","Tooltip","direction","permanent","sticky","_setPosition","subX","subY","tooltipPoint","tooltipWidth","tooltipHeight","openTooltip","closeTooltip","bindTooltip","_tooltip","isTooltipOpen","unbindTooltip","_initTooltipInteractions","_tooltipHandlersAdded","_moveTooltip","_openTooltip","_addFocusListeners","mousemove","_setAriaDescribedByOnLayer","toggleTooltip","setTooltipContent","getTooltip","_addFocusListenersOnLayer","moving","DivIcon","bgPos","Element","backgroundPosition","divIcon","Default","GridLayer","tileSize","updateWhenZooming","updateInterval","maxNativeZoom","minNativeZoom","noWrap","keepBuffer","_levels","_tiles","_removeAllTiles","_tileZoom","_setAutoZIndex","isLoading","_loading","tileZoom","_clampZoom","_updateLevels","viewprereset","_invalidateAll","createTile","getTileSize","edgeZIndex","nextFrame","willPrune","tile","loaded","_onOpaqueTile","_noPrune","_pruneTiles","_fadeFrame","_onUpdateLevel","_removeTilesAtZoom","_onRemoveLevel","level","_setZoomTransform","_onCreateLevel","_level","retain","_retainParent","_retainChildren","_removeTile","z2","coords2","_tileCoordsToKey","animating","_setView","noPrune","tileZoomChanged","_abortLoading","_resetGrid","_setZoomTransforms","translate","_tileSize","_globalTileRange","_pxBoundsToTileRange","_wrapX","_wrapY","_getTiledPixelBounds","mapZoom","halfSize","tileRange","tileCenter","noPruneRange","_isValidTile","_addTile","tileBounds","_tileCoordsToBounds","_keyToBounds","_keyToTileCoords","_tileCoordsToNwSe","nwPoint","sePoint","_initTile","tilePos","_getTilePos","_wrapCoords","_tileReady","_noTilesToLoad","newCoords","gridLayer","TileLayer","subdomains","errorTileUrl","zoomOffset","tms","zoomReverse","detectRetina","referrerPolicy","_onTileRemove","noRedraw","_tileOnLoad","_tileOnError","getTileUrl","_getSubdomain","_getZoomForUrl","invertedY","tilePoint","tileLayer","TileLayerWMS","defaultWmsParams","service","request","wmsParams","realRetina","_crs","_wmsVersion","projectionKey","setParams","tileLayerWMS","WMS","wms","Renderer","_updatePaths","_destroyContainer","_onZoom","zoomend","_onZoomEnd","_onAnimZoom","_updateTransform","currentCenterPoint","_center","topLeftOffset","Canvas","_onViewPreReset","_postponeUpdatePaths","_draw","_onMouseMove","_handleMouseOut","_ctx","_redrawRequest","_redrawBounds","_redraw","_updateDashArray","order","_order","_drawLast","_drawFirst","_requestRedraw","_extendRedrawBounds","dashValue","_dashArray","_clear","clearRect","save","restore","beginPath","_drawing","closePath","_fillStroke","arc","globalAlpha","fillStyle","setLineDash","lineWidth","strokeStyle","clickedLayer","_fireEvent","_handleMouseHover","_hoveredLayer","_mouseHoverThrottled","candidateHoveredLayer","vmlCreate","vmlMixin","coordsize","_stroke","_fill","stroked","filled","dashStyle","endcap","joinstyle","_setPath","SVG","_rootGroup","_svgSize","_getPaneRenderer","_createRenderer","preferCanvas","Rectangle","_boundsToLatLngs","rectangle","BoxZoom","_pane","overlayPane","_resetStateTimeout","_destroy","_resetState","_clearDeferredResetState","contextmenu","mouseup","_onMouseUp","keydown","_onKeyDown","_box","_finish","boxZoomBounds","doubleClickZoom","DoubleClickZoom","_onDoubleClick","inertia","inertiaDeceleration","inertiaMaxSpeed","worldCopyJump","maxBoundsViscosity","Drag","_onPreDragLimit","_onPreDragWrap","_positions","_times","_offsetLimit","_viscosity","_lastTime","_lastPos","_absPos","_prunePositions","pxCenter","pxWorldCenter","_initialWorldOffset","_worldWidth","_viscousLimit","limit","worldWidth","halfWidth","newX1","newX2","newX","speedVector","limitedSpeed","limitedSpeedVector","decelerationDuration","keyboardPanDelta","Keyboard","keyCodes","down","_setPanDelta","_setZoomDelta","_onFocus","_onBlur","mousedown","_addHooks","_removeHooks","_focused","docEl","panDelta","_panKeys","codes","_zoomKeys","scrollWheelZoom","wheelDebounceTime","wheelPxPerZoomLevel","ScrollWheelZoom","_onWheelScroll","_delta","debounce","_lastMousePos","_timer","_performZoom","d2","d3","d4","tapHoldDelay","tapHold","tapTolerance","TapHold","_holdTimeout","_cancel","_isTapValid","_cancelClickPrevent","_simulateEvent","cancelClickPrevent","simulatedEvent","MouseEvent","touchZoom","bounceAtZoomLimits","TouchZoom","_onTouchStart","_zooming","_centerPoint","_startLatLng","_pinchStartLatLng","_startDist","_startZoom","_onTouchMove","_onTouchEnd","_animRequest","moveFn","Projection","latLng","oldL","defineLocale","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","isPM","meridiem","hours","minutes","isLower","longDateFormat","LT","LTS","LL","LLL","LLLL","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","ss","hh","dd","M","MM","yy","dayOfMonthOrdinalParse","ordinal","number","week","dow","doy","pluralForm","plurals","withoutSuffix","isFuture","weekdaysParseExact","hour","minute","postformat","symbolMap","preparse","numberMap","suffixes","plural","word","forms","relativeTimeWithPlural","standalone","isFormat","ww","lastDigit","last2Digits","meridiemHour","monthsShortRegex","monthsParseExact","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","softMutation","mutationTable","monthsParse","monthsRegex","monthsStrictRegex","monthsShortStrictRegex","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","weekdaysParse","longMonthsParse","shortMonthsParse","ll","lll","llll","output","processRelativeTime","Function","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","mom","_calendarEl","monthsShortDot","invalidDate","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eras","since","narrow","abbr","eraYearOrdinalRegex","eraYearOrdinalParse","$0","$2","isUpper","processFutureTime","eifelerRegelAppliesToNumber","processPastTime","units","translateSeconds","translateSingular","relativeTimeWithSingular","relativeSeconds","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","numbersNouns","translateFuture","translatePast","numberNoun","numberAsNoun","hundred","ten","hm","weekdaysCaseReplace","nominative","accusative","genitive","processHoursFunction","webpackContext","req","webpackContextResolve","__webpack_require__","hookCallback","setHookCallback","isObject","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","res","arrLen","createUTC","strict","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","rfc2822","weekdayMismatch","getParsingFlags","_pf","_isValid","flags","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_f","_l","_tzm","_isUTC","_locale","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","_relativeTime","pastFuture","addUnitAlias","shorthand","lowerCase","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","getPrioritizedUnits","unitsObj","isLeapYear","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","p4","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","localeMonthsShort","_monthsShort","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","fwd","getUTCDay","dayOfYearFromWeeks","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","globalLocale","baseConfig","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","getLocale","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","obsOffset","militaryOffset","numOffset","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","W","createLocal","gg","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","millisecond","createFromConfig","prepareConfig","configFromInput","isUTC","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","quarters","quarter","weeks","isoWeek","milliseconds","_milliseconds","_days","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","sign","offsetFromString","chunkOffset","cloneWithOffset","model","setTime","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","createAdder","isAdding","invalid","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","inclusivity","localFrom","localTo","inputMs","asFloat","zoneDelta","monthDiff","wholeMonthDiff","toISOString","keepOffset","datetime","zone","inputString","defaultFormatUtc","defaultFormat","humanize","fromNow","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","_eras","localeErasParse","eraName","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","get$1","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","Timeline","NAMESPACE","Scene","addOption","updateTweenProgress","removeTween","tweenChanges","TweenObject","newTween","loglevel","triggerTweens","vertical","info","tweenvars","thisTween","oldCallback","newCallback","_util","PIN_SPACER_ATTRIBUTE","Controller","_updateTimeout","_refreshTimeout","SCROLL_DIRECTION_FORWARD","SCROLL_DIRECTION_REVERSE","SCROLL_DIRECTION_PAUSED","DEFAULT_OPTIONS","CONTROLLER_OPTIONS","_sceneObjects","_updateScenesOnNextCycle","_scrollPos","_scrollDirection","_isDocument","_viewPortSize","construct","getViewportSize","onChange","ri","refreshInterval","scheduleRefresh","refresh","getScrollPos","setScrollPos","_setScrollPos","updateScenes","scenesToUpdate","oldScrollPos","deltaScroll","scrollPos","debounceUpdate","rAF","resizeEvent","createEvent","initEvent","sortScenes","ScenesArray","scenes","newScene","globalSceneOptions","removeScene","updateScene","immediately","scrollTarget","additionalParameter","containerOffset","elementOffset","scrollPosMethod","about","scrollDirection","isDocument","newLoglevel","newState","resetScenes","cAF","extension","oldClass","$super","_durationUpdateMethod","_controller","SCENE_STATE_BEFORE","SCENE_STATE_DURING","SCENE_STATE_AFTER","SCENE_OPTIONS","_state","_progress","_scrollOffset","_triggerPos","optionName","addSceneOption","validateOption","fullname","nameparts","eventname","updateTriggerElementPosition","updateScrollOffset","updateDuration","onContainerResize","tmpParent","newProgress","startPos","endPos","_pin","updatePinState","doUpdate","oldState","reverseOrForward","eventVars","stateChanged","eventName","_pinOptions","varname","changeOption","newval","reason","elementPos","telem","controllerInfo","_validate","validate","perc","logMSG","oldval","newVal","shifts","triggerPosition","durationChanged","updatePinDimensions","removePin","forceUnpin","containerInfo","pinTarget","spacer","newCSS","inFlow","change","pushFollowers","fixedPos","scrollDistance","during","marginCollapse","isMarginCollapseType","relSize","autoFullWidth","updatePinInContainer","updateRelativePinSpacer","onMousewheelOverPin","defaultSettings","spacerClass","pushFollowersActivelySet","parentDisplay","boundsParams","pinCSS","sizeCSS","spacerCSS","boxSizing","mozBoxSizing","webkitBoxSizing","___origStyle","pinInlineCSS","margins","_cssClasses","_cssClassElems","removeClassToggle","setClassToggle","validationCallback","U","floatval","_dimension","outer","includeMargin","DomElement","marginRight","_camelCase","vendors","_requestAnimationFrame","_cancelAnimationFrame","currTime","loglevels","getHours","getMinutes","getSeconds","getMilliseconds","HTMLElement","SVGElement","_get","NodeList","ref","relativeToViewport","classname","addIndicators","removeIndicators","setVelocity","removeVelocity","Slick","instanceUid","dataSettings","accessibility","appendArrows","appendDots","asNavFor","slider","dotsClass","edgeFriction","focusOnSelect","focusOnChange","initialSlide","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","rtl","slide","slidesPerRow","swipe","touchMove","touchThreshold","useCSS","useTransform","variableWidth","verticalSwiping","waitForAnimate","initials","autoPlayTimer","currentDirection","currentLeft","currentSlide","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","slideCount","slideWidth","$slideTrack","$slides","sliding","slideOffset","swipeLeft","swiping","$list","touchObject","transformsEnabled","unslicked","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","positionProp","rowCount","shouldClick","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","mozHidden","webkitHidden","autoPlay","autoPlayClear","autoPlayIterator","changeSlide","clickHandler","selectHandler","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","addSlide","slickAdd","markup","addBefore","unload","reinit","animateHeight","targetHeight","animateSlide","targetLeft","animProps","animStart","applyTransition","disableTransition","getNavTarget","slideHandler","setInterval","clearInterval","slideTo","buildArrows","buildDots","getDotCount","buildOut","setupInfinite","updateDots","setSlideClasses","buildRows","newSlides","numOfSlides","originalSlides","slidesPerSection","row","checkResponsive","forceUpdate","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","unslick","dontAnimate","indexOffset","checkNavigable","navigables","prevNavigable","getNavigableIndexes","cleanUpEvents","interrupt","cleanUpSlideEvents","orientationChange","cleanUpRows","fadeSlide","fadeSlideOut","filterSlides","slickFilter","focusHandler","$sf","getCurrent","slickCurrentSlide","breakPoint","counter","pagerQty","getLeft","verticalHeight","targetSlide","coef","verticalOffset","offsetLeft","getOption","slickGetOption","indexes","getSlick","getSlideCount","swipedSlide","goTo","slickGoTo","creation","setProps","startLoad","loadSlider","initializeEvents","updateArrows","initADA","numDotGroups","tabControlIndexes","slideControlIndex","ariaButtonControl","mappedSlideIndex","initArrowEvents","initDotEvents","initSlideEvents","action","initUI","loadRange","rangeStart","rangeEnd","loadImages","imagesScope","imageSource","imageSrcSet","imageSizes","imageToLoad","prevSlide","nextSlide","progressiveLazyLoad","slickNext","slickPause","slickPlay","postSlide","slickPrev","tryCount","$imgsToLoad","initializing","lastVisibleIndex","currentBreakpoint","responsiveSettings","windowDelay","removeSlide","slickRemove","removeBefore","setCSS","positionProps","setDimensions","setFade","setHeight","setOption","slickSetOption","bodyStyle","WebkitTransition","MozTransition","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","allSlides","remainder","evenCoef","infiniteCount","targetElement","sync","animSlide","oldSlide","slideLeft","navTarget","swipeDirection","xDist","yDist","swipeAngle","startX","curX","startY","curY","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","swipeStart","swipeMove","positionOffset","verticalSwipeLength","unfilterSlides","slickUnfilter","fromBreakpoint","keyCounter","allWaypoints","Adapter","adapter","horizontal","triggerPoint","group","Group","findOrCreate","Context","findOrCreateByElement","offsetAliases","queueTrigger","previous","invokeAll","allWaypointsArray","waypointKey","destroyAll","disableAll","enableAll","refreshAll","viewportHeight","viewportWidth","adapters","continuous","requestAnimationFrameShim","oldWindowLoad","didScroll","didResize","oldScroll","waypoints","waypointContextKey","windowContext","createThrottledScrollHandler","createThrottledResizeHandler","waypoint","checkEmpty","horizontalEmpty","verticalEmpty","resizeHandler","handleResize","scrollHandler","handleScroll","isTouch","triggeredGroups","axes","newScroll","backward","axisKey","wasBeforeTriggerPoint","nowAfterTriggerPoint","groupKey","flushTriggers","contextOffset","contextScroll","contextDimension","contextModifier","wasBeforeScroll","nowAfterScroll","triggeredForward","adjustment","oldTriggerPoint","freshWaypoint","findByElement","contextId","mozRequestAnimationFrame","webkitRequestAnimationFrame","byTriggerPoint","byReverseTriggerPoint","clearTriggerQueues","triggerQueues","JQueryAdapter","createExtension","framework","overrides","Zepto","createWaypoints","configs","createWaypoint","entered","exit","exited","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","__esModule","definition","globalThis","hmd","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","Leaflet","removeCookie","app","home"],"sourceRoot":""}