{"version":3,"sources":["aPolyfill_promise.min.js","apolyfill_Function.name.js","behaviors.js","wow.js","AffixColumn/AffixColumn.js","AnimatedBackgrounds/AtlasPlayer.js","Animations/Animations.js","CollapseContent/collapse_content.js","Depaginate/depaginate.js","GoogleMap/GoogleMap.js","Offcanvas/betteroffcanvas.js","PageTransition/page_transition.js","ScrollEffects/ScrollEffects.js","SiteHeader/AccountSlideIn.js","SiteHeader/SiteHeader.js","StaffGrid/StaffGrid.js","TabbedContent/tabbed_content.js","UTM/utm_preserve.js","VideoPlayer/VideoPlayer.js","SiteHeader/bw-advanced-menu/js/frontend.js","SiteHeader/bw-advanced-menu/js/settings.js"],"names":[],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3lCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"script.js","sourcesContent":["!function(e){function n(){}function t(e,n){return function(){e.apply(n,arguments)}}function o(e){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof e)throw new TypeError(\"not a function\");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],s(e,this)}function i(e,n){for(;3===e._state;)e=e._value;return 0===e._state?void e._deferreds.push(n):(e._handled=!0,void o._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null===t)return void(1===e._state?r:u)(n.promise,e._value);var o;try{o=t(e._value)}catch(i){return void u(n.promise,i)}r(n.promise,o)}))}function r(e,n){try{if(n===e)throw new TypeError(\"A promise cannot be resolved with itself.\");if(n&&(\"object\"==typeof n||\"function\"==typeof n)){var i=n.then;if(n instanceof o)return e._state=3,e._value=n,void f(e);if(\"function\"==typeof i)return void s(t(i,n),e)}e._state=1,e._value=n,f(e)}catch(r){u(e,r)}}function u(e,n){e._state=2,e._value=n,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var n=0,t=e._deferreds.length;n=9 <12\n// * Chrome <33\nif (needsPolyfill) {\n // For:\n // * IE >=9 <12\n // * Chrome >=5 <33\n if (canDefineProp) {\n Object.defineProperty(Function.prototype, \"name\", {\n get: function() {\n var name = _name.call(this);\n\n // Since named function definitions have immutable names, also memoize the\n // output by defining the `name` property directly on this Function\n // instance so that this polyfill will not need to be invoked again\n if (this !== Function.prototype) {\n Object.defineProperty(this, \"name\", {\n value: name,\n configurable: true\n });\n }\n\n return name;\n },\n configurable: true\n });\n }\n // For:\n // * Chrome <5\n else if (canDefineGetter) {\n // NOTE:\n // The snippet:\n //\n // x.__defineGetter__('y', z);\n //\n // ...is essentially equivalent to:\n //\n // Object.defineProperty(x, 'y', {\n // get: z,\n // configurable: true, // <-- key difference #1\n // enumerable: true // <-- key difference #2\n // });\n //\n Function.prototype.__defineGetter__(\"name\", function() {\n var name = _name.call(this);\n\n // Since named function definitions have immutable names, also memoize the\n // output by defining the `name` property directly on this Function\n // instance so that this polyfill will not need to be invoked again\n if (this !== Function.prototype) {\n this.__defineGetter__(\"name\", function() { return name; });\n }\n\n return name;\n });\n }\n}\n\n})();","/*global define, window, document*/\n\n//Polyfill for Object.create.\nif (typeof Object.create !== 'function') {\n Object.create = (function () {\n \"use strict\";\n var Temp = function () {};\n return function (prototype) {\n if (arguments.length > 1) {\n throw new Error('Second argument not supported');\n }\n if (typeof prototype !== 'object') {\n throw new TypeError('Argument must be an object');\n }\n Temp.prototype = prototype;\n var result = new Temp();\n Temp.prototype = null;\n return result;\n };\n }());\n}\n\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(\"Behaviors\", [\"jquery\"], factory);\n } else {\n root.Behaviors = factory(root.jQuery);\n }\n}(this, function ($) {\n \"use strict\";\n\n var module = {},\n behavior_registry = {},\n content_ready_listeners = [],\n ElementMissingError = error(\"ElementMissingError\");\n \n /* Throttle an event handler.\n *\n * Returns a function which, no matter how frequently it's called, will\n * only trigger a maximum of once per timeout period. More specifically,\n * the first event will always be processed, then, no events will process\n * until the end of the timeout period. If one or more events occurred\n * during this period, the last event recieved will trigger immediately\n * after the end of the timeout period, as well as restart the throttling\n * period. Any preceding events will be discarded.\n *\n * Not to be confused with a debounce, which only fires the event handler\n * at the end of a string of events spaced closer than the timeout period.\n *\n * The nature of this function means that any passed in function's return\n * value will be discarded.\n */\n function throttle_single(func, timeout) {\n var lastTimeout, afterLastArgs, afterLastThis;\n\n function unthrottle() {\n if (afterLastArgs !== undefined) {\n func.apply(afterLastThis, afterLastArgs);\n afterLastArgs = undefined;\n lastTimeout = window.setTimeout(unthrottle, timeout);\n } else {\n lastTimeout = undefined;\n }\n }\n\n return function () {\n var myThis = this, myArgs = [], i;\n\n for (i = 0; i < arguments.length; i += 1) {\n myArgs.push(arguments[i]);\n }\n\n if (lastTimeout === undefined) {\n func.apply(myThis, myArgs);\n lastTimeout = window.setTimeout(unthrottle, timeout);\n } else {\n afterLastArgs = myArgs;\n afterLastThis = myThis;\n }\n };\n }\n\n function Behavior(elem) {\n //Do something to elem\n this.$elem = $(elem);\n }\n\n /* Find a behavior's markup.\n *\n * The $context argument passed to this function is the jQuery element that\n * will be searched for behaviors. Any additional arguments will be passed\n * to Behavior.locate and ultimately to the behavior's constructor.\n */\n Behavior.find_markup = function ($context) {\n var results = [], i, splitArgs = [], Class = this;\n\n for (i = 1; i < arguments.length; i += 1) {\n splitArgs.push(arguments[i]);\n }\n \n function processElem(index, elem) {\n var locateArgs = [elem].concat(splitArgs);\n\n results.push(Class.locate.apply(Class, locateArgs));\n }\n \n $context.filter(Class.QUERY).each(processElem);\n $context.find(Class.QUERY).each(processElem);\n\n return results;\n };\n\n /* Locate a behavior onto an element, returning an instance of that\n * behavior that you can work with.\n *\n * A behavior locates onto an element by instantiating an instance of\n * itself and installing it onto the markup's jQuery data. Therefore, we\n * will only instantiate that behavior once; and further calls to .locate\n * instead return the same object. Thus, it is safe to use .locate as a\n * general accessor - it is idempotent.\n *\n * The elem argument indicates the element that the behavior should locate\n * onto. Further arguments are passed onto the constructor.\n *\n * TODO: Is there a non-jQuery way of handling this?\n */\n Behavior.locate = function (elem) {\n var $elem = $(elem), new_object, i, objectArgs = [elem], Class = this,\n rc = $elem.data(\"behaviors-registered-classes\");\n \n if ($elem.length === 0) {\n throw new ElementMissingError(\"Attempted to locate a Behavior onto an empty element query.\");\n }\n\n if (rc === undefined) {\n rc = {};\n }\n\n if (rc[Class.name] === undefined) {\n //Grab the other arguments\n for (i = 1; i < arguments.length; i += 1) {\n objectArgs.push(arguments[i]);\n }\n\n new_object = Object.create(Class.prototype);\n Class.apply(new_object, objectArgs);\n rc[Class.name] = new_object;\n } else {\n new_object = rc[Class.name];\n }\n\n $elem.data(\"behaviors-registered-classes\", rc);\n\n return new_object;\n };\n\n /* Respond to the presence of new content on the page.\n *\n * By default, we attempt to find markup on all children of the context.\n * Subclasses may do something crazier, like say delay behavior processing\n * until some third-party API is loaded.\n *\n * Consider this roughly equivalent to $(document).ready() callbacks.\n */\n Behavior.content_ready = function ($context) {\n var Class = this;\n\n Class.find_markup($context);\n };\n \n /* Respond to the impending removal of content from the page.\n * \n * Most behaviors that only attach event handlers to their own content are\n * safe and do not need to implement content removal support: they will\n * inherently \"fall away\".\n * \n * However, behaviors that run a constant animation kernel or attach event\n * handlers to elements outside of their own ownership must provide a\n * mechanism to detach those event handlers and stop those kernels.\n */\n Behavior.content_removal = function ($context) {\n var Class = this,\n $attached_elems = $context.find(Class.QUERY);\n \n //Iterate through each element and see if our behavior has located upon\n //them. We don't just call .find_markup/.locate since we don't want to\n //risk initializing something just to tear it down one cycle later.\n $attached_elems.each(function (index, attach_elem) {\n var $elem = $(attach_elem),\n rc = $elem.data(\"behaviors-registered-classes\");\n \n if (rc === undefined) {\n return;\n }\n \n if (rc[Class.name] === undefined) {\n return;\n }\n \n if (rc[Class.name].deinitialize === undefined) {\n return;\n }\n \n rc[Class.name].deinitialize();\n });\n };\n\n /* Register a behavior so that it can respond to global events such as new\n * content becoming ready.\n *\n * It is not always appropriate to register your behavior to recieve load\n * events. Generally, if this is a behavior you would initialize yourself,\n * perhaps with special arguments, then you should not register that here.\n */\n function register_behavior(Class, name) {\n if (name === undefined) {\n name = Class.name;\n }\n\n behavior_registry[name] = Class;\n }\n \n /* Register a function that is called when content is ready.\n * \n * This function should only be used for things that are not a Behavior.\n * Proper behaviors should be registered using register_behavior for future\n * uses. Non-behavior listeners get registered here so that future uses of\n * behavior registration do not conflict with non-Behavior listeners.\n */\n function register_content_listener(func) {\n content_ready_listeners.push(func);\n }\n\n /* Indicate that some new content is ready.\n *\n * The given content will be passed onto all registered behaviors.\n *\n * CMS/frameworks with their own ready mechanism will need to ship their\n * own replacement/wrapper for this function that pushes calls to this\n * function over to that mechanism; and calls from that mechanism need to\n * come back here.\n */\n function content_ready($context) {\n var k, i;\n \n function do_later(obj, func) {\n window.setTimeout(func.bind(obj, $context), 0);\n }\n \n for (i = 0; i < content_ready_listeners.length; i += 1) {\n do_later(undefined, content_ready_listeners[i]);\n }\n\n for (k in behavior_registry) {\n if (behavior_registry.hasOwnProperty(k)) {\n do_later(behavior_registry[k], behavior_registry[k].content_ready);\n }\n }\n }\n \n /* Indicate that content is about to be removed.\n * \n * Registered behaviors with destructors will be called upon to remove any\n * external event handlers or animation kernels preventing them from being\n * terminated by the JS runtime.\n * \n * TODO: Add content_removal listener functions.\n */\n function content_removal($context) {\n var k, i;\n \n function do_later(obj, func) {\n window.setTimeout(func.bind(obj, $context), 0);\n }\n \n for (k in behavior_registry) {\n if (behavior_registry.hasOwnProperty(k)) {\n do_later(behavior_registry[k], behavior_registry[k].content_removal);\n }\n }\n }\n \n function error(error_class_name, ParentClass) {\n if (error_class_name === undefined) {\n throw new Error(\"Please name your error subclass.\");\n }\n\n if (!(ParentClass instanceof Function)) {\n ParentClass = Error;\n }\n\n var SubError = function (message) {\n var err = new Error(message);\n err.name = error_class_name;\n\n this.name = error_class_name;\n this.message = err.message;\n if (err.stack) {\n this.stack = err.stack;\n }\n };\n\n SubError.prototype = new ParentClass(\"u dont c me\");\n SubError.prototype.constructor = SubError;\n SubError.prototype.name = error_class_name;\n\n delete SubError.prototype.stack;\n\n return SubError;\n }\n \n function inherit(ChildClass, ParentClass) {\n var k;\n\n //Use the prototyping system to copy methods from parent to child.\n ChildClass.prototype = Object.create(ParentClass.prototype);\n ChildClass.prototype.constructor = ChildClass;\n ChildClass.prototype.parent = ParentClass.prototype;\n\n //Manually copy class-level methods from parent to child.\n for (k in ParentClass) {\n if (ParentClass.hasOwnProperty(k)) {\n ChildClass[k] = ParentClass[k];\n }\n }\n }\n\n function init(ChildClass, object, args) {\n ChildClass.prototype.parent.constructor.apply(object, args);\n }\n \n /* By default, report the initial page load to registered behaviors.\n */\n $(document).ready(function () {\n content_ready($(document));\n });\n \n module.ElementMissingError = ElementMissingError;\n module.throttle_single = throttle_single;\n module.Behavior = Behavior;\n module.error = error;\n module.inherit = inherit;\n module.init = init;\n module.register_behavior = register_behavior;\n module.content_ready = content_ready;\n module.content_removal = content_removal;\n module.register_content_listener = register_content_listener;\n\n return module;\n}));\n","(function() {\n var MutationObserver, Util, WeakMap, getComputedStyle, getComputedStyleRX,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n Util = (function() {\n function Util() {}\n\n Util.prototype.extend = function(custom, defaults) {\n var key, value;\n for (key in defaults) {\n value = defaults[key];\n if (custom[key] == null) {\n custom[key] = value;\n }\n }\n return custom;\n };\n\n Util.prototype.isMobile = function(agent) {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);\n };\n\n Util.prototype.createEvent = function(event, bubble, cancel, detail) {\n var customEvent;\n if (bubble == null) {\n bubble = false;\n }\n if (cancel == null) {\n cancel = false;\n }\n if (detail == null) {\n detail = null;\n }\n if (document.createEvent != null) {\n customEvent = document.createEvent('CustomEvent');\n customEvent.initCustomEvent(event, bubble, cancel, detail);\n } else if (document.createEventObject != null) {\n customEvent = document.createEventObject();\n customEvent.eventType = event;\n } else {\n customEvent.eventName = event;\n }\n return customEvent;\n };\n\n Util.prototype.emitEvent = function(elem, event) {\n if (elem.dispatchEvent != null) {\n return elem.dispatchEvent(event);\n } else if (event in (elem != null)) {\n return elem[event]();\n } else if ((\"on\" + event) in (elem != null)) {\n return elem[\"on\" + event]();\n }\n };\n\n Util.prototype.addEvent = function(elem, event, fn) {\n if (elem.addEventListener != null) {\n return elem.addEventListener(event, fn, false);\n } else if (elem.attachEvent != null) {\n return elem.attachEvent(\"on\" + event, fn);\n } else {\n return elem[event] = fn;\n }\n };\n\n Util.prototype.removeEvent = function(elem, event, fn) {\n if (elem.removeEventListener != null) {\n return elem.removeEventListener(event, fn, false);\n } else if (elem.detachEvent != null) {\n return elem.detachEvent(\"on\" + event, fn);\n } else {\n return delete elem[event];\n }\n };\n\n Util.prototype.innerHeight = function() {\n if ('innerHeight' in window) {\n return window.innerHeight;\n } else {\n return document.documentElement.clientHeight;\n }\n };\n\n return Util;\n\n })();\n\n WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function() {\n function WeakMap() {\n this.keys = [];\n this.values = [];\n }\n\n WeakMap.prototype.get = function(key) {\n var i, item, j, len, ref;\n ref = this.keys;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n item = ref[i];\n if (item === key) {\n return this.values[i];\n }\n }\n };\n\n WeakMap.prototype.set = function(key, value) {\n var i, item, j, len, ref;\n ref = this.keys;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n item = ref[i];\n if (item === key) {\n this.values[i] = value;\n return;\n }\n }\n this.keys.push(key);\n return this.values.push(value);\n };\n\n return WeakMap;\n\n })());\n\n MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function() {\n function MutationObserver() {\n if (typeof console !== \"undefined\" && console !== null) {\n console.warn('MutationObserver is not supported by your browser.');\n }\n if (typeof console !== \"undefined\" && console !== null) {\n console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');\n }\n }\n\n MutationObserver.notSupported = true;\n\n MutationObserver.prototype.observe = function() {};\n\n return MutationObserver;\n\n })());\n\n getComputedStyle = this.getComputedStyle || function(el, pseudo) {\n this.getPropertyValue = function(prop) {\n var ref;\n if (prop === 'float') {\n prop = 'styleFloat';\n }\n if (getComputedStyleRX.test(prop)) {\n prop.replace(getComputedStyleRX, function(_, _char) {\n return _char.toUpperCase();\n });\n }\n return ((ref = el.currentStyle) != null ? ref[prop] : void 0) || null;\n };\n return this;\n };\n\n getComputedStyleRX = /(\\-([a-z]){1})/g;\n\n this.WOW = (function() {\n WOW.prototype.defaults = {\n boxClass: 'wow',\n animateClass: 'animated',\n offset: 0,\n mobile: true,\n live: true,\n callback: null,\n scrollContainer: null\n };\n\n function WOW(options) {\n if (options == null) {\n options = {};\n }\n this.scrollCallback = bind(this.scrollCallback, this);\n this.scrollHandler = bind(this.scrollHandler, this);\n this.resetAnimation = bind(this.resetAnimation, this);\n this.start = bind(this.start, this);\n this.scrolled = true;\n this.config = this.util().extend(options, this.defaults);\n if (options.scrollContainer != null) {\n this.config.scrollContainer = document.querySelector(options.scrollContainer);\n }\n this.animationNameCache = new WeakMap();\n this.wowEvent = this.util().createEvent(this.config.boxClass);\n }\n\n WOW.prototype.init = function() {\n var ref;\n this.element = window.document.documentElement;\n if ((ref = document.readyState) === \"interactive\" || ref === \"complete\") {\n this.start();\n } else {\n this.util().addEvent(document, 'DOMContentLoaded', this.start);\n }\n return this.finished = [];\n };\n\n WOW.prototype.start = function() {\n var box, j, len, ref;\n this.stopped = false;\n this.boxes = (function() {\n var j, len, ref, results;\n ref = this.element.querySelectorAll(\".\" + this.config.boxClass);\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n results.push(box);\n }\n return results;\n }).call(this);\n this.all = (function() {\n var j, len, ref, results;\n ref = this.boxes;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n results.push(box);\n }\n return results;\n }).call(this);\n if (this.boxes.length) {\n if (this.disabled()) {\n this.resetStyle();\n } else {\n ref = this.boxes;\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n this.applyStyle(box, true);\n }\n }\n }\n if (!this.disabled()) {\n this.util().addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\n this.util().addEvent(window, 'resize', this.scrollHandler);\n this.interval = setInterval(this.scrollCallback, 50);\n }\n if (this.config.live) {\n return new MutationObserver((function(_this) {\n return function(records) {\n var k, len1, node, record, results;\n results = [];\n for (k = 0, len1 = records.length; k < len1; k++) {\n record = records[k];\n results.push((function() {\n var l, len2, ref1, results1;\n ref1 = record.addedNodes || [];\n results1 = [];\n for (l = 0, len2 = ref1.length; l < len2; l++) {\n node = ref1[l];\n results1.push(this.doSync(node));\n }\n return results1;\n }).call(_this));\n }\n return results;\n };\n })(this)).observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n };\n\n WOW.prototype.stop = function() {\n this.stopped = true;\n this.util().removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\n this.util().removeEvent(window, 'resize', this.scrollHandler);\n if (this.interval != null) {\n return clearInterval(this.interval);\n }\n };\n\n WOW.prototype.sync = function(element) {\n if (MutationObserver.notSupported) {\n return this.doSync(this.element);\n }\n };\n\n WOW.prototype.doSync = function(element) {\n var box, j, len, ref, results;\n if (element == null) {\n element = this.element;\n }\n if (element.nodeType !== 1) {\n return;\n }\n element = element.parentNode || element;\n ref = element.querySelectorAll(\".\" + this.config.boxClass);\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n if (indexOf.call(this.all, box) < 0) {\n this.boxes.push(box);\n this.all.push(box);\n if (this.stopped || this.disabled()) {\n this.resetStyle();\n } else {\n this.applyStyle(box, true);\n }\n results.push(this.scrolled = true);\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n\n WOW.prototype.show = function(box) {\n this.applyStyle(box);\n box.className = box.className + \" \" + this.config.animateClass;\n if (this.config.callback != null) {\n this.config.callback(box);\n }\n this.util().emitEvent(box, this.wowEvent);\n this.util().addEvent(box, 'animationend', this.resetAnimation);\n this.util().addEvent(box, 'oanimationend', this.resetAnimation);\n this.util().addEvent(box, 'webkitAnimationEnd', this.resetAnimation);\n this.util().addEvent(box, 'MSAnimationEnd', this.resetAnimation);\n return box;\n };\n\n WOW.prototype.applyStyle = function(box, hidden) {\n var delay, duration, iteration;\n duration = box.getAttribute('data-wow-duration');\n delay = box.getAttribute('data-wow-delay');\n iteration = box.getAttribute('data-wow-iteration');\n return this.animate((function(_this) {\n return function() {\n return _this.customStyle(box, hidden, duration, delay, iteration);\n };\n })(this));\n };\n\n WOW.prototype.animate = (function() {\n if ('requestAnimationFrame' in window) {\n return function(callback) {\n return window.requestAnimationFrame(callback);\n };\n } else {\n return function(callback) {\n return callback();\n };\n }\n })();\n\n WOW.prototype.resetStyle = function() {\n var box, j, len, ref, results;\n ref = this.boxes;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n results.push(box.style.visibility = 'visible');\n }\n return results;\n };\n\n WOW.prototype.resetAnimation = function(event) {\n var target;\n if (event.type.toLowerCase().indexOf('animationend') >= 0) {\n target = event.target || event.srcElement;\n return target.className = target.className.replace(this.config.animateClass, '').trim();\n }\n };\n\n WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {\n if (hidden) {\n this.cacheAnimationName(box);\n }\n box.style.visibility = hidden ? 'hidden' : 'visible';\n if (duration) {\n this.vendorSet(box.style, {\n animationDuration: duration\n });\n }\n if (delay) {\n this.vendorSet(box.style, {\n animationDelay: delay\n });\n }\n if (iteration) {\n this.vendorSet(box.style, {\n animationIterationCount: iteration\n });\n }\n this.vendorSet(box.style, {\n animationName: hidden ? 'none' : this.cachedAnimationName(box)\n });\n return box;\n };\n\n WOW.prototype.vendors = [\"moz\", \"webkit\"];\n\n WOW.prototype.vendorSet = function(elem, properties) {\n var name, results, value, vendor;\n results = [];\n for (name in properties) {\n value = properties[name];\n elem[\"\" + name] = value;\n results.push((function() {\n var j, len, ref, results1;\n ref = this.vendors;\n results1 = [];\n for (j = 0, len = ref.length; j < len; j++) {\n vendor = ref[j];\n results1.push(elem[\"\" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);\n }\n return results1;\n }).call(this));\n }\n return results;\n };\n\n WOW.prototype.vendorCSS = function(elem, property) {\n var j, len, ref, result, style, vendor;\n style = getComputedStyle(elem);\n result = style.getPropertyCSSValue(property);\n ref = this.vendors;\n for (j = 0, len = ref.length; j < len; j++) {\n vendor = ref[j];\n result = result || style.getPropertyCSSValue(\"-\" + vendor + \"-\" + property);\n }\n return result;\n };\n\n WOW.prototype.animationName = function(box) {\n var animationName;\n try {\n animationName = this.vendorCSS(box, 'animation-name').cssText;\n } catch (_error) {\n animationName = getComputedStyle(box).getPropertyValue('animation-name');\n }\n if (animationName === 'none') {\n return '';\n } else {\n return animationName;\n }\n };\n\n WOW.prototype.cacheAnimationName = function(box) {\n return this.animationNameCache.set(box, this.animationName(box));\n };\n\n WOW.prototype.cachedAnimationName = function(box) {\n return this.animationNameCache.get(box);\n };\n\n WOW.prototype.scrollHandler = function() {\n return this.scrolled = true;\n };\n\n WOW.prototype.scrollCallback = function() {\n var box;\n if (this.scrolled) {\n this.scrolled = false;\n this.boxes = (function() {\n var j, len, ref, results;\n ref = this.boxes;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n box = ref[j];\n if (!(box)) {\n continue;\n }\n if (this.isVisible(box)) {\n this.show(box);\n continue;\n }\n results.push(box);\n }\n return results;\n }).call(this);\n if (!(this.boxes.length || this.config.live)) {\n return this.stop();\n }\n }\n };\n\n WOW.prototype.offsetTop = function(element) {\n var top;\n while (element.offsetTop === void 0) {\n element = element.parentNode;\n }\n top = element.offsetTop;\n while (element = element.offsetParent) {\n top += element.offsetTop;\n }\n return top;\n };\n\n WOW.prototype.isVisible = function(box) {\n var bottom, offset, top, viewBottom, viewTop;\n offset = box.getAttribute('data-wow-offset') || this.config.offset;\n viewTop = (this.config.scrollContainer && this.config.scrollContainer.scrollTop) || window.pageYOffset;\n viewBottom = viewTop + Math.min(this.element.clientHeight, this.util().innerHeight()) - offset;\n top = this.offsetTop(box);\n bottom = top + box.clientHeight;\n return top <= viewBottom && bottom >= viewTop;\n };\n\n WOW.prototype.util = function() {\n return this._util != null ? this._util : this._util = new Util();\n };\n\n WOW.prototype.disabled = function() {\n return !this.config.mobile && this.util().isMobile(navigator.userAgent);\n };\n\n return WOW;\n\n })();\n\n}).call(this);\n","/*global define, console, document, window*/\n/*jslint continue:true*/\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(\"AffixColumn\", [\"jquery\", \"Behaviors\"], factory);\n } else {\n root.AffixColumn = factory(root.jQuery, root.Behaviors);\n }\n}(this, function ($, Behaviors) {\n \"use strict\";\n\n var module = {};\n \n function $do(that, target) {\n return function () {\n target.apply(that, arguments);\n };\n }\n \n /* An Affix root is an element which is used to determine the edges of the\n * region that columns stick to. It also provides the core event handlers\n * to drive the AffixColumn and AffixRow behaviors.\n */\n function Affix(elem, scrollElem) {\n Behaviors.init(Affix, this, arguments);\n\n this.height = this.$elem.height();\n this.offsetTop = this.$elem.offset().top;\n \n this.columns = [];\n this.$scrollElem = $(scrollElem || document);\n this.$scrollHeightElem = this.$scrollElem;\n \n //weird DOM quirk\n if (this.$scrollElem[0] === document) {\n this.$scrollHeightElem = $(window);\n }\n \n this.$alwaysTopElem = $(this.$elem.data(\"affixcolumn-alwaystop\"));\n this.$alwaysBottomElem = $(this.$elem.data(\"affixcolumn-alwaysbottom\"));\n \n this.bind_event_handlers();\n this.find_columns_and_rows();\n \n this.resized();\n this.scroll_changed();\n }\n \n Behaviors.inherit(Affix, Behaviors.Behavior);\n \n Affix.QUERY = \"[data-affixcolumn='root']\";\n \n Affix.prototype.deinitialize = function () {\n this.unbind_event_handlers();\n };\n \n /* Check our alwaystop/alwaysbottom elements and see if they are floating.\n * If so, add their height to the top and bottom adjustments given to the\n * individual columns.\n */\n Affix.prototype.determine_global_floating_adjustment = function () {\n this.globalTopAdjust = 0;\n \n this.$alwaysTopElem.each(function (index, atelem) {\n var $atelem = $(atelem);\n this.globalTopAdjust += $atelem.height();\n }.bind(this));\n \n this.globalBottomAdjust = 0;\n \n this.$alwaysBottomElem.each(function (index, atelem) {\n var $atelem = $(atelem);\n this.globalBottomAdjust += $atelem.height();\n }.bind(this));\n };\n\n Affix.prototype.resized = function () {\n var i, maxColHeight = 0, maxColId, heightSum, disp = 0, topAdjust = 0, bottomAdjust = 0;\n \n this.determine_global_floating_adjustment();\n this.height = this.$elem.height();\n \n if (this.columns.length > 0) {\n //Scan top rows to fix their displacement heights and determine top\n //adjustments.\n for (i = 0; i < this.columns.length; i += 1) {\n //Also, kill floating adjustments plz\n this.columns[i].clear_floating_adjustments();\n \n if (!this.columns[i].has_option(\"top\")) {\n continue;\n }\n \n //Top rows never get a bottom adjustment.\n this.columns[i].set_floating_adjustments(this.globalTopAdjust, topAdjust, 0, 0);\n \n disp = this.columns[i].displacement_height();\n \n this.columns[i].$height_bearing_element().css(\"min-height\", disp + \"px\");\n topAdjust += disp;\n }\n \n //Scan bottom rows to fix their displacement heights and determine top\n //adjustments. This is done in reverse order so that the bottommost\n //bottom row gets the lowest bottom float adjustment.\n for (i = this.columns.length - 1; i >= 0; i -= 1) {\n if (!this.columns[i].has_option(\"bottom\")) {\n continue;\n }\n \n //Bottom rows never get a top adjustment.\n this.columns[i].set_floating_adjustments(0, 0, this.globalBottomAdjust, bottomAdjust);\n \n disp = this.columns[i].displacement_height();\n \n this.columns[i].$height_bearing_element().css(\"min-height\", disp + \"px\");\n bottomAdjust += disp;\n }\n \n //Scan columns to select the height-bearing column.\n for (i = 0; i < this.columns.length; i += 1) {\n if (!this.columns[i].has_option(\"column\")) {\n continue;\n }\n \n //Columns get both the top and bottom adjustment.\n this.columns[i].set_floating_adjustments(this.globalTopAdjust, topAdjust, this.globalBottomAdjust, bottomAdjust);\n \n //Determine which column is height bearing for this Affix.\n if (maxColHeight < this.columns[i].displacement_height() &&\n !this.columns[i].has_option(\"noheightbearing\")) {\n maxColHeight = this.columns[i].displacement_height();\n maxColId = i;\n }\n \n this.columns[i].remove_state(\"tallest\");\n }\n \n if (maxColId !== undefined) {\n this.columns[maxColId].add_state(\"tallest\");\n }\n }\n };\n \n Affix.prototype.scroll_changed = function () {\n var i, maxColHeight = 0, maxColId;\n \n this.height = this.$elem.height();\n this.windowHeight = this.$scrollHeightElem.height();\n this.offsetTop = this.$elem.offset().top;\n this.scrollTop = this.$scrollElem.scrollTop();\n this.offsetBottom = this.offsetTop + this.height;\n this.scrollBottom = this.scrollTop + this.windowHeight;\n \n if (this.columns.length > 0) {\n for (i = 0; i < this.columns.length; i += 1) {\n this.columns[i].viewport_changed(this.height, this.offsetTop, this.offsetBottom, this.scrollTop, this.scrollBottom);\n }\n }\n };\n \n Affix.prototype.unbind_event_handlers = function () {\n if (this.scroll_handler !== undefined) {\n this.$scrollElem.off(\"scroll\", this.scroll_handler);\n }\n \n if (this.resize_handler !== undefined) {\n $(window).off(\"resize\", this.resize_handler);\n }\n };\n \n Affix.prototype.bind_event_handlers = function () {\n this.unbind_event_handlers();\n \n this.scroll_handler = $do(this, this.scroll_changed);\n this.resize_handler = $do(this, this.resized);\n \n this.$scrollElem.on(\"scroll\", this.scroll_handler);\n $(window).on(\"resize\", this.resize_handler);\n $(document).on(\"load\", this.resize_handler);\n $(\"img\").on(\"load\", this.resize_handler);\n };\n \n Affix.prototype.find_columns_and_rows = function () {\n var $likely_columns = this.$elem.find(AffixColumn.QUERY),\n $likely_roots = this.$elem.find(Affix.QUERY);\n\n this.columns = [];\n this.roots = [];\n\n $likely_columns.each(function (index, lcelem) {\n var $lcelem = $(lcelem),\n $parent_root = $lcelem.parents().filter(Affix.QUERY).first();\n\n if ($parent_root[0] === this.$elem) {\n this.columns.push(AffixColumn.locate($lcelem));\n }\n }.bind(this));\n\n $likely_roots.each(function (index, lrelem) {\n var $lrelem = $(lrelem),\n $parent_root = $lrelem.parents().filter(Affix.QUERY).first();\n\n if ($parent_root[0] === this.$elem) {\n this.roots.push(Affix.locate($lrelem));\n }\n }.bind(this));\n };\n \n /* An AffixColumn is a normally fixed element which sticks to the top or\n * bottom edges of a scrolling viewport (typically the document).\n * \n * AffixColumn itself contains no event handlers. The parent Affix is\n * responsible for propagating viewport scrolling to it's child Columns.\n * \n * Options may be provided which cause the Column to behave differently.\n * Examples of this include the \"noheightbearing\" option, which prevents\n * your AffixColumn from being marked as tallest for the purposes of parent\n * element height preservation. See the parse_option_list function for more\n * information on the option list format, and has_option for what options\n * are available.\n * \n * The name \"AffixColumn\" is a misnomer. \"Columns\" may be configured as rows\n * or columns in CSS. Orientation of the Column is configured with the\n * column/top/bottom options. If neither is active, \"column\" is assumed.\n */\n function AffixColumn(elem) {\n this.$elem = $(elem);\n this.options = this.parse_option_list(this.$elem.data(\"affixcolumn-options\"));\n \n this.top_adjust = 0;\n this.bottom_adjust = 0;\n }\n \n Behaviors.inherit(AffixColumn, Behaviors.Behavior);\n \n AffixColumn.QUERY = \"[data-affixcolumn='column']\";\n \n /* Calculate the height taken up by the AffixColumn if placed in normal\n * document flow.\n * \n * The floating adjustments currently applied to the column may cause\n * invalid displacement height results to occur. For best results, call\n * clear_floating_adjustments to remove them, and then trigger a viewport\n * update from the Affix root once the height has been measured.\n */\n AffixColumn.prototype.displacement_height = function () {\n return this.$elem.height();\n };\n \n /* Change the top/bottom values that this column floats at.\n * \n * Floating adjustments determine the safe area of space that this element\n * may float at without being overlapped or overlapping top or bottom rows.\n * \n * These will override any top/bottom values set via CSS.\n */\n AffixColumn.prototype.set_floating_adjustments = function (globalTop, top, globalBottom, bottom) {\n this.top_adjust = top;\n this.bottom_adjust = bottom;\n \n this.global_top_adjust = globalTop;\n this.global_bottom_adjust = globalBottom;\n };\n \n /* Remove inline CSS applied to make floating adjustments visually present.\n * \n * You must call this method before querying displacement_height, or you\n * will get invalid results. After calling this method, you must trigger a\n * viewport update by calling scroll_changed on the containing Affix root.\n */\n AffixColumn.prototype.clear_floating_adjustments = function () {\n this.$elem.css(\"top\", \"\");\n this.$elem.css(\"bottom\", \"\");\n };\n \n /* Return the element responsible for propagating our displacement height in\n * normal document flow.\n * \n * By default, the height bearing element is our parent element. We do not\n * have a facility to override this currently.\n */\n AffixColumn.prototype.$height_bearing_element = function () {\n return this.$elem.parent();\n };\n \n AffixColumn.prototype.add_state = function (state) {\n this.$elem.addClass(\"is-AffixColumn--\" + state);\n };\n \n AffixColumn.prototype.remove_state = function (state) {\n this.$elem.removeClass(\"is-AffixColumn--\" + state);\n };\n \n /* Determine if an AffixColumn option applies given the current viewport.\n * \n * Valid options include:\n * \n * - column: AffixColumn to be oriented vertically aside other columns.\n * The tallest column is marked as \"tallest\" and considered the height\n * bearing column, whereby it is expected to be positioned in normal\n * document flow such that the Affix element can grab it's CSS height.\n * \n * - top: AffixColumn to be oriented above other columns. Top rows are\n * given a CSS min-height equal to the sum of their childrens' heights\n * and their children are assumed to float. This minimum height will be\n * applied as the top value to any following tops or columns.\n *\n * - bottom: AffixColumn to be oriented below other columns. Bottom rows\n * are given a CSS min-height in the same fashion as top rows. This\n * minimum height will be applied as the bottom value to any preceding\n * bottoms or columns.\n * \n * - noheightbearing: Column-oriented AffixColumn to be disqualified from\n * being marked as a height-bearing column.\n */\n AffixColumn.prototype.has_option = function (option_string) {\n var i;\n \n for (i = 0; i < this.options.length; i += 1) {\n if (this.options[i].media === null || window.matchMedia(this.options[i].media).matches) {\n //Column enabled by default\n if (option_string === \"column\" &&\n this.options[i].options.indexOf(\"top\") === -1 &&\n this.options[i].options.indexOf(\"bottom\") === -1) {\n return true;\n }\n \n return this.options[i].options.indexOf(option_string) > -1;\n }\n }\n \n if (option_string === \"column\") {\n return true;\n } else {\n return false;\n }\n };\n \n AffixColumn.MATCH_MEDIA_QUERY_REGEX = /\\(([\\s\\S]*)\\)/g;\n \n /* Parse an option list.\n * \n * The option list determines what options are active on a column. It is\n * comma separated. Each comma indicates a new option list for a particular\n * media query. The first media query to match determines the total option\n * set. The final option set may or may not have a media query; if it does\n * not, then it serves as the default option set.\n * \n * This is very analagous to the sizes attribute of tags in modern\n * browsers. Example format:\n * \n * (min-width: 450px) column noheightbearing, top\n */\n AffixColumn.prototype.parse_option_list = function (option_list_string) {\n var cases, i, j, rval = [], case_obj = {}, match;\n \n if (option_list_string === undefined) {\n option_list_string = \"\";\n }\n \n cases = option_list_string.split(\",\");\n \n for (i = 0; i < cases.length; i += 1) {\n case_obj = {};\n match = this.constructor.MATCH_MEDIA_QUERY_REGEX.exec(cases[i]);\n \n //Reset the string. Sharing regex objects is dirty...\n this.constructor.MATCH_MEDIA_QUERY_REGEX.lastIndex = 0;\n \n if (match === null || match.length === 0) {\n case_obj.options = cases[i].split(\" \");\n case_obj.media = null;\n } else {\n case_obj.options = cases[i].slice(match[0]).split(\" \");\n case_obj.media = match[0];\n }\n \n //Filter empty options\n for (j = 0; j < case_obj.options.length; j += 0) {\n if (case_obj.options[j] === \"\") {\n case_obj.options.splice(j, 1);\n } else {\n j += 1;\n }\n }\n \n rval.push(case_obj);\n }\n \n return rval;\n };\n \n /* Internal method used by Affix to communicate to it's children the new\n * parameters of the scroll viewport.\n */\n AffixColumn.prototype.viewport_changed = function (rootHeight, offsetTop, offsetBottom, scrollTop, scrollBottom) {\n var isTopAnchored = this.has_option(\"column\") || this.has_option(\"top\"),\n isBottomAnchored = this.has_option(\"anchorbottom\") || this.has_option(\"bottom\"),\n bottomStateAdjust = true,\n topStateAdjust = true,\n adjustWithoutGlobal = true;\n \n //Remove existing floating adjustments.\n //Otherwise, our displacement height is incorrect.\n this.clear_floating_adjustments();\n \n //Apply affix states.\n if (isTopAnchored && scrollTop + this.global_top_adjust < offsetTop ||\n isBottomAnchored && scrollBottom - this.displacement_height() < offsetTop) {\n this.add_state(\"top\");\n this.remove_state(\"bottom\");\n bottomStateAdjust = false;\n } else if (isTopAnchored && scrollTop + this.top_adjust + this.global_top_adjust + this.displacement_height() + this.bottom_adjust >= offsetBottom ||\n isBottomAnchored && scrollBottom >= offsetBottom) {\n this.remove_state(\"top\");\n this.add_state(\"bottom\");\n topStateAdjust = false;\n } else {\n this.remove_state(\"top\");\n this.remove_state(\"bottom\");\n adjustWithoutGlobal = false;\n }\n \n //Apply floating adjustments.\n if ((this.has_option(\"column\") || this.has_option(\"top\")) && topStateAdjust) {\n if (adjustWithoutGlobal) {\n this.$elem.css(\"top\", this.top_adjust + \"px\");\n } else {\n this.$elem.css(\"top\", this.top_adjust + this.global_top_adjust + \"px\");\n }\n }\n \n if ((this.has_option(\"column\") || this.has_option(\"bottom\")) && bottomStateAdjust) {\n if (adjustWithoutGlobal) {\n this.$elem.css(\"bottom\", this.bottom_adjust + \"px\");\n } else {\n this.$elem.css(\"bottom\", this.bottom_adjust + this.global_bottom_adjust + \"px\");\n }\n }\n };\n \n Behaviors.register_behavior(Affix);\n\n module.Affix = Affix;\n module.AffixColumn = AffixColumn;\n\n return module;\n}));\n","/*global define, console, window, HTMLImageElement, Promise*/\n\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(\"AtlasPlayer\", [\"jquery\", \"Behaviors\"], factory);\n } else {\n root.AtlasPlayer = factory(root.jQuery, root.Behaviors);\n }\n}(this, function ($, Behaviors) {\n \"use strict\";\n var module = {};\n\n /* A Behavior that plays an image atlas on a canvas.\n *\n * Atlas description format is that which is generated by the following\n * Photoshop script: https://github.com/tonioloewald/Layer-Group-Atlas\n */\n function AtlasPlayer() {\n Behaviors.init(AtlasPlayer, this, arguments);\n\n this.deinitialize_stop = false;\n\n this.$canvas = this.$elem;\n if (!this.$canvas.is(\"canvas\")) {\n this.$canvas = this.$elem.find(\"canvas\");\n }\n\n this.context = this.$canvas[0].getContext(\"2d\");\n\n this.image = undefined;\n this.atlas_data = undefined;\n\n //TODO: Make configurable\n this.anim_player_running = false;\n\n this.ready().then(function () {\n $(window).on(\"resize\", this.size_canvas_to_fit.bind(this));\n \n this.anim_length = this.find_anim_length();\n \n if (this.atlas_data.autoplay === true) {\n this.play();\n }\n }.bind(this));\n }\n\n Behaviors.inherit(AtlasPlayer, Behaviors.Behavior);\n\n AtlasPlayer.QUERY = \"[data-atlasplayer]\";\n\n /* Cause AtlasPlayer to ensure it's image and atlas are ready.\n *\n * Returns a promise which resolves when the atlas is ready for playback.\n * Promise will reject if the image is an image tag which has failed to\n * load.\n */\n AtlasPlayer.prototype.ready = function () {\n if (this.ready_promise === undefined) {\n this.ready_promise = new Promise(function (resolve, reject) {\n this.ready_resolve = resolve;\n this.ready_reject = reject;\n }.bind(this));\n\n this.find_image();\n this.find_atlas();\n this.is_ready();\n }\n\n return this.ready_promise;\n };\n\n /* Determine if the atlas is ready for playback.\n *\n * Calling this function also has the side effect of resolving the ready\n * promise if it has not already been done. If this function returns true\n * for the first time, then the promise has been resolved. If it returns\n * false, it may have been rejected (say, if the image fails to load).\n */\n AtlasPlayer.prototype.is_ready = function () {\n var image_ready, atlas_ready, total_ready;\n\n if (this.image === undefined) {\n image_ready = false;\n } else if (this.image.constructor === HTMLImageElement) {\n if (this.image.complete) {\n if (this.image.naturalHeight === 0) {\n //Something has gone horribly wrong\n this.ready_reject();\n image_ready = false;\n } else {\n image_ready = true;\n }\n } else {\n image_ready = false;\n }\n } else {\n //Other drawables are presumed already loaded\n image_ready = true;\n }\n\n if (this.atlas_data !== undefined && this.atlas_data.then !== undefined) {\n //Not ready, since a promise was provided\n atlas_ready = false;\n } else {\n atlas_ready = this.atlas_data !== undefined;\n }\n\n total_ready = image_ready && atlas_ready;\n\n if (total_ready) {\n this.ready_resolve();\n }\n\n return total_ready;\n };\n\n /* Called to find the image we're drawing our animation from, if present.\n */\n AtlasPlayer.prototype.find_image = function () {\n var image_id = this.$elem.data(\"atlasplayer-image\");\n\n if (this.image !== undefined) {\n return;\n }\n\n if (image_id !== undefined) {\n this.image = $(image_id)[0];\n\n if (this.image.constructor === HTMLImageElement) {\n $(this.image).on(\"load\", this.is_ready.bind(this));\n }\n }\n };\n\n /* Called to find and load our atlas data.\n */\n AtlasPlayer.prototype.find_atlas = function () {\n var atlas_data = this.$elem.data(\"atlasplayer-data\");\n\n if (this.atlas_data !== undefined) {\n return;\n }\n\n if (typeof atlas_data === \"string\") {\n //Atlas data is a URL.\n this.atlas_data = this.load_atlas_data(atlas_data)\n .then(function (data) {\n this.atlas_data = data;\n this.is_ready();\n }.bind(this))\n .catch(this.ready_reject);\n } else {\n //Atlas data is immediately provided.\n this.atlas_data = atlas_data;\n }\n };\n \n AtlasPlayer.prototype.find_anim_length = function () {\n var anim_length = this.$elem.data(\"atlasplayer-animlength\");\n \n if (anim_length === undefined) {\n anim_length = this.atlas_data.time;\n }\n \n if (anim_length === undefined) {\n anim_length = \"5s\";\n }\n \n anim_length = parseFloat(anim_length, 10);\n \n if (isNaN(anim_length) || anim_length === 0) {\n anim_length = 5000;\n } else {\n anim_length *= 1000;\n }\n \n return anim_length;\n };\n\n /* Load the atlas data.\n *\n * Returns a promise which resolves when the atlas data has loaded.\n */\n AtlasPlayer.prototype.load_atlas_data = function (url) {\n var promiseResolve, promiseReject,\n myPromise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n $.ajax({\n \"url\": url,\n \"dataType\": \"json\"\n }).done(function (data) {\n promiseResolve(data);\n }).fail(function (jqXHR, textStatus, errorThrown) {\n promiseReject([textStatus, errorThrown]);\n });\n\n return myPromise;\n };\n\n /* Cause the canvas to draw a particular atlas frame.\n */\n AtlasPlayer.prototype.draw_frame = function (frame_id) {\n var layerData = this.atlas_data.layers[this.atlas_data.layers.length - frame_id - 1];\n \n if (layerData.width <= 0) {\n return;\n }\n \n if (layerData.height <= 0) {\n return;\n }\n\n this.context.drawImage(this.image,\n //Location of the atlas slice\n layerData.packedOrigin.x * this.image_x_space,\n layerData.packedOrigin.y * this.image_y_space,\n layerData.width * this.image_x_space,\n layerData.height * this.image_y_space,\n //Where we want it\n layerData.left,\n layerData.top,\n layerData.width,\n layerData.height\n );\n };\n \n /* Size the canvas to fit our data.\n */\n AtlasPlayer.prototype.size_canvas_to_fit = function () {\n //Determine the device-specific pixel size of this AtlasPlayer.\n this.canvas_scale_factor = window.devicePixelRatio;\n this.$canvas[0].width = this.$canvas.width() * this.canvas_scale_factor;\n this.$canvas[0].height = this.$canvas.height() * this.canvas_scale_factor;\n \n //Reset the current canvas transform, if any.\n this.context.setTransform(1, 0, 0, 1, 0, 0);\n \n //Scale down our coordinate space\n this.context.scale(this.canvas_scale_factor, this.canvas_scale_factor);\n \n //Determine if cropping is needed.\n this.css_aspect_ratio = this.$canvas.width() / this.$canvas.height();\n this.atlas_aspect_ratio = this.atlas_data.width / this.atlas_data.height;\n if (this.css_aspect_ratio > this.atlas_aspect_ratio) {\n this.context.translate(0, (this.$canvas.width() / this.atlas_aspect_ratio - this.$canvas.height()) / -2);\n \n this.canvas_transform_scale_factor = this.$canvas.width() / this.atlas_aspect_ratio / this.atlas_data.height;\n this.context.scale(this.canvas_transform_scale_factor, this.canvas_transform_scale_factor);\n } else if (this.css_aspect_ratio < this.atlas_aspect_ratio) {\n this.context.translate((this.$canvas.height() * this.atlas_aspect_ratio - this.$canvas.width()) / -2, 0);\n \n this.canvas_transform_scale_factor = this.$canvas.height() * this.atlas_aspect_ratio / this.atlas_data.width;\n this.context.scale(this.canvas_transform_scale_factor, this.canvas_transform_scale_factor);\n }\n \n //We also need to determine if our atlas image is scaled down and adjust\n //our source coordinate space to match.\n this.image_x_space = this.image.width / this.atlas_data.atlas.width;\n this.image_y_space = this.image.height / this.atlas_data.atlas.height;\n \n //Since we just clared the canvas, if we aren't animated, then we need\n //to manually repopulate ourselves:\n if (this.last_frame_drawn !== undefined) {\n this.draw_frame(this.last_frame_drawn);\n }\n };\n\n AtlasPlayer.prototype.animation_krnl = function (time) {\n var step, frame, total_frames;\n\n if (this.deinitialize_stop) {\n return;\n }\n \n if (this.playing === false) {\n this.anim_player_running = false;\n \n if (this.on_animation_complete) {\n this.on_animation_complete();\n this.on_animation_complete = undefined;\n }\n return;\n }\n\n if (this.anim_first_time === undefined) {\n this.anim_first_time = time;\n window.requestAnimationFrame(this.animation_krnl.bind(this));\n return;\n }\n \n if (this.anim_length === undefined) {\n //Don't animate if we haven't loaded yet\n window.requestAnimationFrame(this.animation_krnl.bind(this));\n return;\n }\n\n total_frames = this.atlas_data.layers.length;\n step = this.anim_length / total_frames;\n time = time - this.anim_first_time;\n frame = Math.max(Math.min(Math.round(time / step), total_frames - 1), 0);\n\n if (this.reverse) {\n frame = (total_frames - 1) - frame;\n }\n\n this.context.clearRect(0,0,this.atlas_data.width, this.atlas_data.height);\n this.draw_frame(frame);\n \n this.last_frame_drawn = frame;\n \n if (time > this.anim_length) {\n if (this.atlas_data.loop === true) {\n this.anim_first_time = undefined;\n } else {\n this.anim_player_running = false;\n \n if (this.on_animation_complete) {\n this.on_animation_complete();\n this.on_animation_complete = undefined;\n }\n return;\n }\n }\n \n window.requestAnimationFrame(this.animation_krnl.bind(this));\n };\n\n AtlasPlayer.prototype.update_animation_state = function () {\n if (this.playing && this.anim_player_running === false) {\n if (this.on_animation_complete) {\n this.on_animation_complete();\n }\n \n this.animation_promise = new Promise(function (resolve, reject) {\n this.on_animation_complete = resolve;\n }.bind(this));\n \n this.size_canvas_to_fit();\n this.anim_player_running = true;\n window.requestAnimationFrame(this.animation_krnl.bind(this));\n }\n \n return this.animation_promise;\n };\n \n AtlasPlayer.prototype.play = function () {\n this.playing = true;\n this.reverse = false;\n this.anim_first_time = undefined;\n return this.update_animation_state();\n };\n\n AtlasPlayer.prototype.play_reverse = function () {\n this.playing = true;\n this.reverse = true;\n this.anim_first_time = undefined;\n return this.update_animation_state();\n };\n \n /* Request the animation to stop playing on the next frame.\n * \n * This function also resets the animation to play again.\n */\n AtlasPlayer.prototype.stop = function () {\n //A bit of subtlety: We don't clear anim_player_running since we don't\n //cancel the animation frame when you stop the animation. We instead\n //wait for the animation to stop itself.\n this.playing = false;\n this.reverse = false;\n this.anim_first_time = undefined;\n return this.update_animation_state();\n };\n \n AtlasPlayer.prototype.seek = function (frame) {\n if (frame < 0) {\n frame = this.atlas_data.layers.length - frame - 2;\n }\n\n this.context.clearRect(0,0,this.atlas_data.width, this.atlas_data.height);\n this.draw_frame(frame);\n\n this.last_frame_drawn = frame;\n };\n\n Behaviors.register_behavior(AtlasPlayer);\n\n module.AtlasPlayer = AtlasPlayer;\n\n return module;\n}));\n","/*global define, console, document, window*/\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(\"Animations\", [\"jquery\", \"Behaviors\"], factory);\n } else {\n root.Animations = factory(root.jQuery, root.Behaviors);\n }\n}(this, function ($, Behaviors) {\n \"use strict\";\n \n var module = {};\n\n /* Watches for the start and end of an animation.\n *\n * The .promise attribute stores a promise which resolves whenever the\n * animation has completed or no animation events were detected over a\n * timeout period of 5 second.\n *\n * An important caveat: Animations with delay longer than 5 seconds will\n * fail to fire events and the animation watcher will trigger the timeout\n * behavior instead. You can avoid this behavior by triggering another\n * animation of any kind during the timeout period and keeping it alive\n * until the delayed animation begins.\n */\n function AnimationWatcher($elem) {\n var Class = this.constructor,\n eventSelector = Class.get_unique_id(),\n that = this,\n evtStartNames = \"animationstart.\" + eventSelector +\n \" webkitAnimationStart.\" + eventSelector +\n \" oanimationstart.\" + eventSelector +\n \" MSAnimationStart.\" + eventSelector,\n evtEndNames = \"animationend.\" + eventSelector +\n \" webkitAnimationEnd.\" + eventSelector +\n \" oanimationend.\" + eventSelector +\n \" MSAnimationEnd.\" + eventSelector,\n animation_start = this.animation_start.bind(this),\n animation_end = this.animation_end.bind(this),\n animation_timeout_delay = 5000;\n\n this.eventSelector = eventSelector;\n\n this.$elem = $elem;\n this.$elem.on(evtStartNames, animation_start);\n this.$elem.on(evtEndNames, animation_end);\n\n if (window.Modernizr && window.Modernizr.cssanimations === false) {\n animation_timeout_delay = 0;\n }\n\n this.timeout = window.setTimeout(this.abort_animation.bind(this), animation_timeout_delay);\n this.remaining_animations = [];\n\n //We remove event handlers after one of the handlers resolves the\n //animation promise.\n this.promise = new Promise(function (resolve, reject) {\n that.resolve = resolve;\n that.reject = reject;\n }).then(function () {\n that.$elem.off(evtStartNames, animation_start);\n that.$elem.off(evtEndNames, animation_end);\n });\n\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Created\");\n }\n\n AnimationWatcher.count = 0;\n\n AnimationWatcher.get_unique_id = function () {\n var Class = this,\n sel = \".\" + Class.name + \"_\" + Class.count;\n\n Class.count += 1;\n return sel;\n };\n\n AnimationWatcher.prototype.animation_start = function (evt) {\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Begun (\" + evt.originalEvent.animationName + \")\");\n if (this.timeout !== null) {\n window.clearTimeout(this.timeout);\n this.timeout = null;\n }\n\n this.remaining_animations.push(evt.originalEvent.animationName);\n };\n\n AnimationWatcher.prototype.animation_end = function (evt) {\n var loc = this.remaining_animations.indexOf(evt.originalEvent.animationName);\n\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Ended (\" + evt.originalEvent.animationName + \")\");\n\n if (loc !== -1) {\n this.remaining_animations.splice(loc, 1);\n }\n\n if (this.remaining_animations.length === 0) {\n this.resolve();\n }\n };\n\n AnimationWatcher.prototype.abort_animation = function (evt) {\n console.log(\"ANIMATIONWATCHER\" + this.eventSelector + \": Abort timeout triggered\");\n\n if (this.remaining_animations.length === 0) {\n this.resolve();\n }\n };\n\n module.AnimationWatcher = AnimationWatcher;\n\n return module;\n}));\n","/*global define, console, document, window*/\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(\"CollapseContent\", [\"jquery\", \"Behaviors\"], factory);\n } else {\n root.CollapseContent = factory(root.jQuery, root.Behaviors);\n }\n}(this, function ($, Behaviors) {\n \"use strict\";\n\n var module = {};\n\n function $do(that, target) {\n return function () {\n target.apply(that, arguments);\n };\n }\n\n function CollapseContentRegion(elem) {\n Behaviors.init(CollapseContentRegion, this, arguments);\n\n this.$elem = $(elem);\n this.visible = this.$elem.data(\"collapsecontent-region-visible\") !== undefined;\n\n this.update_classes();\n }\n\n Behaviors.inherit(CollapseContentRegion, Behaviors.Behavior);\n\n CollapseContentRegion.QUERY = \"[data-collapsecontent-region]\";\n\n CollapseContentRegion.prototype.update_classes = function () {\n this.$elem.find(\"[data-collapsecontent-body]\").each(function (index, body_elem) {\n if (this.visible) {\n $(body_elem).addClass(\"is-CollapseContent--visible\");\n $(body_elem).removeClass(\"is-CollapseContent--hidden\");\n } else {\n $(body_elem).removeClass(\"is-CollapseContent--visible\");\n $(body_elem).addClass(\"is-CollapseContent--hidden\");\n }\n }.bind(this));\n\n this.$elem.find(\"[data-collapsecontent-trigger]\").each(function (index, trigger_elem) {\n if (this.visible) {\n $(trigger_elem).addClass(\"is-CollapseContent--visible\");\n $(trigger_elem).removeClass(\"is-CollapseContent--hidden\");\n } else {\n $(trigger_elem).removeClass(\"is-CollapseContent--visible\");\n $(trigger_elem).addClass(\"is-CollapseContent--hidden\");\n }\n }.bind(this));\n };\n\n CollapseContentRegion.prototype.make_visible = function () {\n this.visible = true;\n this.update_classes();\n };\n\n CollapseContentRegion.prototype.make_hidden = function () {\n this.visible = false;\n this.update_classes();\n };\n\n CollapseContentRegion.prototype.toggle = function () {\n this.visible = !this.visible;\n this.update_classes();\n\n // Fire custom event when toggles are activated\n newEvent = new $.Event({\n \"type\": \"collapsecontent-toggle\",\n \"visible\": this.visible,\n \"target\": this.$elem,\n });\n\n this.$elem.trigger(newEvent);\n };\n\n function CollapseContentTrigger(elem) {\n Behaviors.init(CollapseContentTrigger, this, arguments);\n\n this.$elem = $(elem);\n\n if (this.$elem.data(\"collapsecontent-trigger\") !== undefined) {\n //Mode 1: Trigger explicitly specifies region to toggle.\n this.region = this.set_region($(this.$elem.data(\"collapsecontent-trigger\"))[0]);\n } else if (this.$elem.attr(\"href\") !== undefined) {\n //Mode 1: Trigger explicitly specifies region to toggle, as an href..\n this.region = this.set_region($(this.$elem.data(\"collapsecontent-trigger\"))[0]);\n }\n\n if (this.region === undefined) {\n //Mode 2: Find parent element that qualifies as a region.\n this.region = this.set_region(this.$elem.parents().filter(CollapseContentRegion.QUERY)[0]);\n }\n\n if (this.region === undefined) {\n console.error(\"There is a CollapseContent trigger that neither points to a valid region nor is a child of a valid region..\");\n }\n\n this.$elem.on(\"click\", this.toggle_intent.bind(this));\n }\n\n Behaviors.inherit(CollapseContentTrigger, Behaviors.Behavior);\n\n CollapseContentTrigger.QUERY = \"[data-collapsecontent-trigger]\";\n\n CollapseContentTrigger.prototype.set_region = function (elem) {\n if (elem === undefined) {\n return;\n }\n\n return CollapseContentRegion.locate(elem);\n };\n\n CollapseContentTrigger.prototype.toggle_intent = function (evt) {\n if (evt) {\n evt.preventDefault();\n }\n \n this.region.toggle();\n };\n\n Behaviors.register_behavior(CollapseContentRegion);\n Behaviors.register_behavior(CollapseContentTrigger);\n\n module.CollapseContentRegion = CollapseContentRegion;\n module.CollapseContentTrigger = CollapseContentTrigger;\n\n return module;\n}));\n","/* Paginate.js\n * A progressively-enhancing infinite scroll library\n * ©2014 HUEMOR Designs All Rights Reserved\n */\n\n/*global jQuery, define, console, window, document*/\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define('depaginate', ['jquery', \"Behaviors\"], factory);\n } else if (root.jQuery) {\n root.PaginateJS = factory(root.jQuery, root.Behaviors);\n } else {\n console.error(\"No jQuery found. Load jQuery before this module or use an AMD-compliant loader.\");\n }\n}(this, function ($, Behaviors) {\n \"use strict\";\n \n var module = {};\n \n function Pager(elem, page_select_handler) {\n Behaviors.init(Pager, this, arguments);\n \n this.links = {};\n this.current = null;\n this.$pager = $(elem);\n this.min_page_count = Infinity;\n this.max_page_count = 0;\n \n this.$pager.addClass(\"is-Paginate--managed\");\n\n this.page_select_handler = page_select_handler;\n\n this.features = this.$pager.data(\"paginate-features\");\n\n if (this.features === undefined) {\n this.features = \"replaceState\";\n }\n\n console.log(\"Pager Features:\" + this.features);\n this.features = this.features.split(\" \");\n }\n \n Behaviors.inherit(Pager, Behaviors.Behavior);\n \n Pager.QUERY = \"[data-paginate='pager']\";\n \n Pager.DEFAULT_LINK = {\n \"loaded\": false,\n \"requested\": false,\n \"pending\": false,\n \"current\": false\n };\n \n Pager.prototype.is_page_loaded = function (pagenumber) {\n return this.links[pagenumber].loaded;\n };\n \n Pager.prototype.set_current_page = function (pagenumber) {\n var i = 0, pageid;\n \n if (this.current === pagenumber) {\n return;\n }\n \n this.current = pagenumber;\n this.links[pagenumber] = this.links[pagenumber] || $.extend({}, Pager.DEFAULT_LINK);\n \n for (pageid in this.links) {\n if (this.links.hasOwnProperty(pageid)) {\n this.links[pageid].current = pageid === pagenumber;\n }\n }\n \n if (this.links[pagenumber].$pagerContents !== undefined) {\n this.$pager.children().detach();\n this.$pager.append(this.links[pagenumber].$pagerContents);\n }\n \n if (this.links[pagenumber].href !== undefined) {\n if (this.features.indexOf(\"replaceState\") > -1 && window.history.replaceState) {\n window.history.replaceState({transition: true, url: this.links[pagenumber].href}, \"\", this.links[pagenumber].href);\n }\n }\n };\n \n Pager.prototype.read_pager = function (pagerElem) {\n var $newPager = $(pagerElem),\n pagerThis = this;\n \n $newPager.find(\"[data-paginate='page']\").each(function (index, pageElem) {\n var $newPage = $(pageElem),\n page = $newPage.data(\"paginate-page\"),\n isCurrent = $newPage.data(\"paginate-current\") !== undefined,\n href = $newPage.attr(\"href\");\n \n pagerThis.links[page] = pagerThis.links[page] || $.extend({}, Pager.DEFAULT_LINK);\n \n pagerThis.links[page].href = href || pagerThis.links[page].href;\n pagerThis.links[page].current = isCurrent;\n \n if (isCurrent) {\n pagerThis.current = page;\n }\n \n if (pagerThis.links[page].pending) {\n pagerThis.load_page(page);\n }\n \n if (page > pagerThis.max_page_count) {\n pagerThis.max_page_count = page;\n }\n \n if (page < pagerThis.min_page_count) {\n pagerThis.min_page_count = page;\n }\n\n $newPage.on(\"click\", function (evt) {\n evt.preventDefault();\n\n if (pagerThis.page_select_handler) {\n pagerThis.page_select_handler(pagerThis, page);\n }\n });\n });\n \n this.links[this.current] = this.links[this.current] || $.extend({}, Pager.DEFAULT_LINK);\n this.links[this.current].$pagerContents = $newPager.children();\n \n if (this.links[this.current].$pagerContents !== undefined) {\n this.$pager.children().detach();\n this.$pager.append(this.links[this.current].$pagerContents);\n }\n };\n \n Pager.prototype.load_page = function (pagenumber, on_success, on_failure) {\n var paginateThis = this;\n \n if (this.links[pagenumber] === undefined || this.links[pagenumber].href === undefined) {\n this.links[pagenumber] = $.extend({}, this.links[pagenumber], Pager.DEFAULT_LINK);\n this.links[pagenumber].pending = true;\n this.links[pagenumber].on_success = on_success || this.links[pagenumber].on_success;\n this.links[pagenumber].on_failure = on_failure || this.links[pagenumber].on_failure;\n \n return;\n }\n \n if (this.links[pagenumber].requested || this.links[pagenumber].loaded) {\n return;\n }\n \n this.links[pagenumber].pending = false;\n this.links[pagenumber].requested = true;\n \n $.ajax({\n \"url\": this.links[pagenumber].href,\n \"dataType\": \"html\"\n }).done(function (data, textStatus, jqXHR) {\n if (paginateThis.links[pagenumber].on_success !== undefined) {\n paginateThis.links[pagenumber].on_success(data, textStatus, jqXHR);\n }\n \n if (on_success !== undefined) {\n on_success(data, textStatus, jqXHR);\n }\n \n paginateThis.links[pagenumber].loaded = true;\n }).fail(function (jqXHR, textStatus, errorThrown) {\n if (paginateThis.links[pagenumber].on_failure !== undefined) {\n paginateThis.links[pagenumber].on_failure(jqXHR, textStatus, errorThrown);\n }\n \n if (on_failure !== undefined) {\n on_failure(jqXHR, textStatus, errorThrown);\n }\n });\n };\n \n Pager.prototype.is_first_page = function (test_page) {\n return (test_page !== null && test_page === this.min_page_count);\n };\n \n Pager.prototype.is_last_page = function (test_page) {\n return (test_page !== null && test_page === this.max_page_count);\n };\n \n module.Pager = Pager;\n \n function Region(elem, on_region_scrolled) {\n var $extantRegion = $(elem);\n Behaviors.init(Region, this, arguments);\n \n this.name = $extantRegion.data(\"paginate-region\");\n\n this.load_methods = $extantRegion.data(\"paginate-methods\");\n\n if (this.load_methods === undefined) {\n this.load_methods = \"scroll\";\n }\n\n console.log(\"LoadMethods:\" + this.load_methods);\n this.load_methods = this.load_methods.split(\" \");\n\n this.features = $extantRegion.data(\"paginate-features\");\n\n if (this.features === undefined) {\n this.features = \"scrollOnLoad\";\n }\n\n console.log(\"Region Features:\" + this.features);\n this.features = this.features.split(\" \");\n \n this.pages = {};\n this.pagenumbers = [];\n \n this.min_page_loaded = Infinity;\n this.max_page_loaded = 0;\n \n this.$region = $extantRegion;\n \n this.$parentScroller = null;\n this.lastScrollTop = 0;\n \n this.on_region_scrolled = on_region_scrolled;\n \n this.$region.addClass(\"is-Paginate--managed\");\n }\n \n Behaviors.inherit(Region, Behaviors.Behavior);\n \n Region.QUERY = \"[data-paginate='region']\";\n \n /* Called to append a new page to the region.\n * \n * Region contents will be extracted from the given region element and\n * appended to the existing region, such that any existing content belonging\n * to pages marked with a lower page number will appear before your page\n * content, and any existing content belonging to pages marked with a higher\n * page number will appear after your page content.\n * \n * Already inserted pages will not be reinserted into the region.\n * \n * As this function inserts content into the page, it will be presented to\n * Behaviors to ensure any Behaviors on the new page content can locate\n * correctly.\n * \n * An event will be fired from the region's element called depaginate_load\n * which serves to indicate when a new page has loaded. Do not use this\n * event to check if new content has been added to the page, use Behaviors'\n * register_behavior or register_content_listener functions instead. This\n * event will be called before behaviors have been located on their\n * elements.\n */\n Region.prototype.read_page_region = function (pageNumber, regionElem) {\n var $newRegion = $(regionElem),\n itemSelector = $newRegion.data(\"paginate-selector\") || \"> *\",\n prevPageNumberId = 0,\n nextPageNumberId = this.pagenumbers.length,\n nextPageNumber,\n prevPageNumber,\n pageAlreadyExists = false,\n i = 0,\n $newItems = $newRegion.find(itemSelector),\n $firstItem = $newItems.first(),\n $lastItem = $newItems.last(),\n oldPageTop = 0,\n newPageTop = 0,\n evt;\n \n if (this.firstVisiblePage !== undefined) {\n oldPageTop = this.page_top_position(this.firstVisiblePage);\n }\n\n for (i = 0; i < this.pagenumbers.length; i += 1) {\n if (this.pagenumbers[i] < pageNumber) {\n prevPageNumberId = i;\n prevPageNumber = this.pagenumbers[i];\n } else if (this.pagenumbers[i] === pageNumber) {\n pageAlreadyExists = true;\n } else {\n nextPageNumber = this.pagenumbers[i];\n nextPageNumberId = i;\n break;\n }\n }\n \n if (!pageAlreadyExists) {\n this.pagenumbers.splice(nextPageNumberId, 0, pageNumber);\n \n if (this.pages[prevPageNumber] !== undefined) {\n $newItems = $newItems.insertAfter(this.pages[prevPageNumber].$lastItem);\n } else if (this.pages[nextPageNumber] !== undefined) {\n $newItems = $newItems.insertBefore(this.pages[nextPageNumber].$firstItem);\n } //else do nothing since this obviously must be the original region\n \n $firstItem = $newItems.first();\n $lastItem = $newItems.last();\n \n this.pages[pageNumber] = this.pages[pageNumber] || {};\n this.pages[pageNumber].$newItems = $newItems;\n this.pages[pageNumber].$firstItem = $firstItem;\n this.pages[pageNumber].$lastItem = $lastItem;\n\n evt = jQuery.Event(\"depaginate_load\");\n evt.region = this;\n evt.target = this.$region[0];\n evt.$newItems = $newItems;\n\n this.$region.trigger(evt);\n \n Behaviors.content_ready($newItems);\n }\n \n if (pageNumber < this.min_page_loaded) {\n this.min_page_loaded = pageNumber;\n }\n \n if (pageNumber > this.max_page_loaded) {\n this.max_page_loaded = pageNumber;\n }\n\n if (this.firstVisiblePage !== undefined) {\n newPageTop = this.page_top_position(this.firstVisiblePage);\n\n if (this.features.indexOf(\"scrollOnLoad\") > -1) {\n window.setTimeout(\n this.scroll_by_delta.bind(this, newPageTop - oldPageTop),\n 50\n );\n }\n }\n };\n \n Region.prototype.register_scroll_handler = function () {\n var cssOverflowX,\n regionThis = this;\n \n if (this.$parentScroller !== null) {\n this.$parentScroller.off(\"scroll.paginate\");\n }\n\n this.$parentScroller = this.$region;\n\n while (this.$parentScroller.length !== 0 && this.$parentScroller.get(0) !== document) {\n cssOverflowX = this.$parentScroller.css(\"overflow-x\");\n\n if (cssOverflowX === \"visible\" || cssOverflowX === \"hidden\") {\n this.$parentScroller = this.$parentScroller.parent();\n } else {\n break;\n }\n }\n \n regionThis.on_scroll({\"target\": this.$parentScroller[0]});\n this.$parentScroller.on(\"scroll.paginate\", function (evt) {\n regionThis.on_scroll(evt);\n });\n\n this.lastScrollTop = this.$parentScroller.scrollTop();\n };\n \n Region.prototype.on_scroll = function (evt) {\n var $target = $(evt.target),\n scrollTop = $target.scrollTop(),\n scrollBottom = scrollTop + (evt.target !== document ? $target.height() : $(window).height()),\n targetTop = evt.target !== document ? $target.position().top : 0,\n targetAdjust = evt.target !== document ? scrollTop : 0,\n i = 0,\n firstVisibleTop = null,\n firstVisiblePage = null,\n lastVisiblePage = null,\n lastVisibleBottom = null,\n scrollDelta = scrollTop - this.lastScrollTop,\n stopOuterLoopSentinel = false,\n regionThis = this;\n \n this.lastScrollTop = scrollDelta;\n \n function pageEach(index, itemElem) {\n var $itemElem = $(itemElem),\n itemTop = targetAdjust + $itemElem.position().top - targetTop,\n itemBottom = itemTop + $itemElem.height(),\n isVisible = (scrollTop <= itemTop && itemTop <= scrollBottom) ||\n (scrollTop <= itemBottom && itemBottom <= scrollBottom) ||\n (itemTop <= scrollTop && scrollBottom <= itemBottom);\n \n if (!isVisible) {\n if (lastVisiblePage !== null) {\n stopOuterLoopSentinel = true;\n }\n\n return true;\n }\n\n if (firstVisiblePage === null) {\n firstVisiblePage = regionThis.pagenumbers[i];\n firstVisibleTop = itemTop;\n }\n \n lastVisiblePage = regionThis.pagenumbers[i];\n lastVisibleBottom = itemTop + $itemElem.height();\n\n return false;\n }\n \n //Determine what pages are visible now\n if (this.pagenumbers.length === 0) {\n console.log(\"There are no page numbers.\");\n }\n \n for (i = 0; i < this.pagenumbers.length; i += 1) {\n if (this.pages[this.pagenumbers[i]].$newItems === 0) {\n console.log(\"There are no pages within page \" + this.pagenumbers[i]);\n }\n \n this.pages[this.pagenumbers[i]].$newItems.each(pageEach);\n \n if (stopOuterLoopSentinel) {\n stopOuterLoopSentinel = false;\n break;\n }\n }\n \n if (firstVisiblePage === null) {\n console.log(\"First visible page did NOT get set. Dropping the scroll event.\");\n return;\n }\n \n this.firstVisiblePage = firstVisiblePage;\n this.lastVisiblePage = lastVisiblePage;\n this.firstVisibleTop = firstVisibleTop;\n this.lastVisibleBottom = lastVisibleBottom;\n\n if (this.load_methods.indexOf(\"scroll\") > -1) {\n this.on_region_scrolled(this, scrollTop, scrollBottom, scrollDelta, firstVisiblePage, lastVisiblePage, firstVisibleTop, lastVisibleBottom);\n }\n };\n \n Region.prototype.first_loaded_page = function () {\n return this.min_page_loaded;\n };\n \n Region.prototype.last_loaded_page = function () {\n return this.max_page_loaded;\n };\n \n Region.prototype.set_additional_content_indicators = function (has_next_page, has_prev_page) {\n if (has_next_page) {\n this.$region.addClass(\"is-Paginate--has_next_page\");\n this.$region.removeClass(\"is-Paginate--no_next_page\");\n } else {\n this.$region.removeClass(\"is-Paginate--has_next_page\");\n this.$region.addClass(\"is-Paginate--no_next_page\");\n }\n \n if (has_prev_page) {\n this.$region.addClass(\"is-Paginate--has_prev_page\");\n this.$region.removeClass(\"is-Paginate--no_prev_page\");\n } else {\n this.$region.removeClass(\"is-Paginate--has_prev_page\");\n this.$region.addClass(\"is-Paginate--no_prev_page\");\n }\n };\n \n /* Returns the position of the top of a particular page.\n */\n Region.prototype.page_top_position = function (pagenumber) {\n var page = this.pages[pagenumber],\n $firstItem,\n measuredOffset,\n $parentScroller = this.$parentScroller,\n scrollerOffset = 0,\n encounteredScroller = false;\n \n if (page === undefined) {\n console.log(\"Missing page: \" + pagenumber);\n console.log(this.pages);\n \n if (pagenumber < this.min_page_loaded || pagenumber === null) {\n pagenumber = this.min_page_loaded;\n }\n \n if (pagenumber > this.max_page_loaded) {\n pagenumber = this.max_page_loaded;\n }\n \n page = this.pages[pagenumber];\n }\n \n $firstItem = page.$firstItem;\n measuredOffset = $firstItem.offset().top;\n if ($parentScroller[0] !== document) {\n scrollerOffset = $parentScroller.offset().top;\n }\n \n return measuredOffset - scrollerOffset;\n };\n \n /* Scroll the region by a particular delta. */\n Region.prototype.scroll_by_delta = function (scrollDelta) {\n var $parentScroller = this.$parentScroller;\n \n $parentScroller.scrollTop($parentScroller.scrollTop() + scrollDelta);\n };\n \n Region.prototype.scroll_absolutely = function (scrollAbs) {\n var $parentScroller = this.$parentScroller;\n \n $parentScroller.scrollTop(scrollAbs);\n };\n \n module.Region = Region;\n \n function Paginate(elem) {\n var $extantPager = $(elem).find(Pager.QUERY),\n $extantRegions = $(elem).find(Region.QUERY),\n currentPage = $(elem).data(\"paginate-page\"),\n paginateThis = this;\n \n Behaviors.init(Paginate, this, arguments);\n \n if ($extantPager.length === 0) {\n console.error(\"No pager was found in this paginage instance.\");\n return;\n }\n \n if (this.$elem.attr('id') === undefined) {\n console.error(\"This paginate needs an id before it can be used.\");\n return;\n }\n \n console.log(\"page: \" + currentPage);\n \n this.$context = $(elem);\n this.id = this.$context.attr(\"id\");\n \n function pshClosure() {\n paginateThis.page_select_handler.apply(paginateThis, arguments);\n }\n\n this.pager = Pager.locate($extantPager.get(0), pshClosure);\n \n if ($extantPager.data(\"paginate-count\") === 1) {\n console.log(\"Not activating depaginate on a region with only one page.\");\n return;\n }\n \n this.pager.set_current_page(currentPage);\n this.pager.read_pager($extantPager.get(0));\n \n this.regions = {};\n this.regionNames = [];\n \n this.currentPage = currentPage;\n \n function orsClosure() {\n paginateThis.on_region_scrolled.apply(paginateThis, arguments);\n }\n \n this.features = $extantPager.data(\"paginate-features\");\n\n if (this.features === undefined) {\n this.features = \"backScroll\";\n }\n\n console.log(\"Paginate Features:\" + this.features);\n this.features = this.features.split(\" \");\n\n $extantRegions.each(function (index, elem) {\n var $extantRegion = $(elem),\n regionName = $extantRegion.data(\"paginate-region\"),\n region,\n currentPage = paginateThis.currentPage;\n \n console.log(\"page: \" + currentPage);\n \n function scrollBack() {\n console.log(\"Scrolling back the user to \" + region.page_top_position(currentPage) + \" (page: \" + currentPage + \")\");\n region.scroll_absolutely(region.page_top_position(currentPage));\n }\n \n paginateThis.regionNames.push(regionName);\n \n region = paginateThis.regions[regionName] || Region.locate(elem, orsClosure);\n paginateThis.regions[regionName] = region;\n \n region.read_page_region(currentPage, elem);\n region.register_scroll_handler();\n \n paginateThis.update_region_indicators(region);\n \n if (!paginateThis.pager.is_first_page(currentPage) && paginateThis.features.indexOf(\"backScroll\") > -1) {\n //User pressed back button, scroll the region into view\n \n $(document).ready(scrollBack);\n $(window).on(\"load\", function () {\n window.setTimeout(scrollBack, 1500);\n });\n }\n });\n }\n \n Behaviors.inherit(Paginate, Behaviors.Behavior);\n \n Paginate.QUERY = \"[data-paginate='paginate']\";\n \n Paginate.prototype.page_load_success = function (data, textStatus, jqXHR) {\n var $data = $(data),\n i = 0,\n $dataPaginate,\n $dataRegion,\n $dataPager,\n region = null,\n paginateThis = this,\n next_page = 0;\n\n $dataPaginate = $data.find(\"#\" + this.id);\n \n if ($dataPaginate.length === 0) {\n $dataPaginate = $data.filter(\"#\" + this.id);\n }\n \n if ($dataPaginate.length === 0) {\n console.error(\"DEPAGINATE: The paginate context with ID \" + this.id + \" could not be found in the loaded page. Errors may result.\");\n }\n \n next_page = $dataPaginate.data(\"paginate-page\");\n\n for (i = 0; i < this.regionNames.length; i += 1) {\n $dataRegion = $dataPaginate.find(\"[data-paginate-region='\" + this.regionNames[i] + \"']\");\n\n if ($dataRegion.length > 0) {\n region = this.regions[this.regionNames[i]];\n region.read_page_region(next_page, $dataRegion[0]);\n }\n }\n\n $dataPager = $dataPaginate.find(Pager.QUERY);\n $dataPager.each(function (index, pagerElem) {\n paginateThis.pager.read_pager(pagerElem);\n });\n\n this.pager.set_current_page(next_page);\n this.update_region_indicators(region);\n };\n\n Paginate.prototype.page_select_handler = function (pager, pagenumber) {\n var paginateThis = this;\n if (this.pager.is_page_loaded(pagenumber)) {\n return;\n }\n\n function on_success() {\n paginateThis.page_load_success.apply(paginateThis, arguments);\n }\n\n this.pager.load_page(pagenumber, on_success);\n };\n\n Paginate.prototype.on_region_scrolled = function (region, scrollTop, scrollBottom, scrollDelta, firstVisiblePage, lastVisiblePage, firstVisibleTop, lastVisibleBottom) {\n var visible_range = lastVisibleBottom - firstVisibleTop,\n visible_pagerange = lastVisiblePage - firstVisiblePage,\n average_page_size = visible_range / visible_pagerange,\n scroll_direction_down = scrollDelta > 0,\n should_load_page,\n next_page,\n paginateThis = this;\n \n function on_success() {\n paginateThis.page_load_success.apply(paginateThis, arguments);\n }\n \n if (scroll_direction_down) {\n should_load_page = scrollBottom + scrollDelta >= lastVisibleBottom;\n next_page = lastVisiblePage + 1;\n \n this.pager.set_current_page(lastVisiblePage);\n } else {\n should_load_page = scrollTop + scrollDelta < firstVisibleTop;\n next_page = firstVisiblePage - 1;\n \n this.pager.set_current_page(firstVisiblePage);\n }\n \n if (next_page < 0) {\n return;\n }\n \n if (should_load_page) {\n this.pager.load_page(next_page, on_success);\n }\n };\n \n Paginate.prototype.update_region_indicators = function (region) {\n region.set_additional_content_indicators(\n !this.pager.is_last_page(region.last_loaded_page()),\n !this.pager.is_first_page(region.first_loaded_page())\n );\n };\n \n module.Paginate = Paginate;\n \n Behaviors.register_behavior(Paginate);\n \n return module;\n}));","/*global define,google,Promise*/\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(\"GoogleMap\", [\"jquery\", \"Behaviors\"], factory);\n } else {\n root.GoogleMap = factory(root.jQuery, root.Behaviors);\n }\n}(this, function ($, Behaviors) {\n \"use strict\";\n \n var module = {};\n \n function GoogleMap() {\n Behaviors.init(GoogleMap, this, arguments);\n \n this.load_gmaps().then(this.render_map.bind(this));\n }\n \n Behaviors.inherit(GoogleMap, Behaviors.Behavior);\n \n GoogleMap.QUERY = \"[data-googlemap]\";\n \n GoogleMap.prototype.center_specified_by_markup = function () {\n return this.$elem.data(\"googlemap-lat\") !== undefined && this.$elem.data(\"googlemap-lng\") !== undefined;\n };\n \n GoogleMap.prototype.determine_default_args = function () {\n var args = {\n center: {lat: 0, lng: 0},\n mapTypeId: google.maps.MapTypeId.ROADMAP,\n disableDefaultUI: true,\n draggable: false,\n scrollwheel: false,\n zoom: 15\n };\n \n if (this.$elem.data(\"googlemap-draggable\") !== undefined) {\n args.draggable = true;\n }\n \n if (this.$elem.data(\"googlemap-scrollzoom\") !== undefined) {\n args.scrollwheel = true;\n }\n \n if (this.center_specified_by_markup()) {\n args.center = {lat: this.$elem.data(\"googlemap-lat\"),\n lng: this.$elem.data(\"googlemap-lng\")};\n }\n \n if (this.$elem.data(\"googlemap-zoom\") !== undefined) {\n args.zoom = this.$elem.data(\"googlemap-zoom\");\n }\n \n return args;\n };\n \n GoogleMap.prototype.load_gmaps = function () {\n return Promise.resolve().then(function () {\n if (window.google) {\n return;\n } else {\n //TODO: Autoload Gmaps API\n throw new Error(\"Google Maps API not loaded at time of initialization.\");\n }\n });\n };\n \n GoogleMap.prototype.render_map = function () {\n var $markers = this.$elem.find('[data-googlemap-marker]'), i;\n \n // create map\n this.map = new google.maps.Map(this.$elem[0], this.determine_default_args());\n \n this.map.markers = [];\n for (i = 0; i < $markers.length; i += 1) {\n this.add_marker($($markers[i]), this.map);\n }\n \n // center map\n this.center_map();\n };\n \n GoogleMap.prototype.add_marker = function ($marker) {\n var latlng = new google.maps.LatLng($marker.data('googlemap-lat'), $marker.data('googlemap-lng')),\n marker = new google.maps.Marker({\n position: latlng,\n map: this.map\n }),\n infowindow;\n \n this.map.markers.push(marker);\n \n // if marker contains HTML, add it to an infoWindow\n if ($marker.html()) {\n infowindow = new google.maps.InfoWindow({\n content\t\t: $marker.html()\n });\n \n google.maps.event.addListener(marker, 'click', this.marker_click_intent.bind(this, marker, infowindow));\n }\n };\n \n GoogleMap.prototype.marker_click_intent = function (marker, infowindow) {\n infowindow.open(this.map, marker);\n };\n \n GoogleMap.prototype.center_map = function () {\n var i, marker, latlng, bounds = new google.maps.LatLngBounds();\n \n // loop through all markers and create bounds\n for (i = 0; i < this.map.markers.length; i += 1) {\n marker = this.map.markers[i];\n latlng = new google.maps.LatLng(marker.position.lat(), marker.position.lng());\n bounds.extend(latlng);\n }\n \n if (!this.center_specified_by_markup()) {\n if (this.map.markers.length === 1) {\n this.map.setCenter(bounds.getCenter());\n } else {\n this.map.fitBounds(bounds);\n }\n }\n };\n \n Behaviors.register_behavior(GoogleMap);\n \n module.GoogleMap = GoogleMap;\n \n return module;\n}));","/*global define, console*/\n/*jslint bitwise: true */\n/* updated 9/14/2016 */\n\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (elt) { /*, from*/\n \"use strict\";\n var len = this.length >>> 0, from = Number(arguments[1]) || 0, derparam;\n from = (from < 0) ? Math.ceil(from) : Math.floor(from);\n if (from < 0) {\n from += len;\n }\n\n for (derparam; from < len; from += 1) {\n if (from in this && this[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n}\n\n(function (root, factory) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(\"betteroffcanvas\", [\"jquery\"], factory);\n } else {\n // Browser globals\n root.betteroffcanvas = factory(root.jQuery);\n }\n}(this, function ($) {\n //BetterOffcanvas\n //Works like this:\n /*\n *