/******/!function(e){function t(a){if(i[a])return i[a].exports;var n=i[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}// webpackBootstrap /******/ var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t,i){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}var n=i(1),r=a(n),o=i(2),s=a(o),l=i(3),c=a(l),u=i(4),d=a(u),h=i(5),p=a(h),m=i(6),v=a(m),g=i(7),f=a(g),b=i(8),y=a(b),k=i(9),S=a(k),w=i(10),_=a(w),M=i(11),O=a(M),C=i(12),I=a(C),T=i(13),P=a(T),E=i(14),A=a(E),$=i(15),L=a($),V=i(16),D=(a(V),i(17)),R=a(D),U=i(18),x=a(U),N=i(19),j=a(N),B=i(20),F=a(B),W=i(21),Y=a(W),z=i(22),G=a(z),q=i(23),H=a(q),K=i(24),Q=a(K),J=i(25),Z=a(J),X=i(26),ee=a(X),te=i(27),ie=a(te),ae=i(28),ne=a(ae),re=i(29),oe=a(re),se=i(30),le=a(se),ce=i(31),ue=a(ce),de=i(32),he=a(de),pe=i(33),me=a(pe),ve=i(34),ge=a(ve),fe=i(35),be=a(fe),ye=i(36),ke=a(ye),Se=i(37),we=a(Se),_e=i(38),Me=a(_e),Oe=i(39),Ce=a(Oe),Ie=i(40),Te=a(Ie),Pe=i(41),Ee=a(Pe),Ae=i(42),$e=a(Ae),Le=i(43),Ve=a(Le),De=i(45),Re=a(De),Ue=i(46),xe=a(Ue),Ne=i(47),je=a(Ne),Be=i(48),Fe=a(Be),We=i(49),Ye=a(We),ze=i(50),Ge=a(ze),qe=i(51),He=a(qe),Ke=i(52),Qe=a(Ke),Je=i(53),Ze=a(Je),Xe=i(54),et=a(Xe),tt=i(55),it=a(tt),at=i(56),nt=a(at),rt=i(57),ot=a(rt),st=i(58),lt=a(st),ct=i(59),ut=a(ct),dt=i(60),ht=a(dt),pt=i(61),mt=a(pt),vt=i(62),gt=a(vt),ft=i(63),bt=a(ft),yt=i(64),kt=a(yt),St=i(65),wt=a(St),_t=i(66),Mt=a(_t),Ot=i(67),Ct=a(Ot),It=i(68),Tt=a(It),Pt=i(69),Et=a(Pt),At=i(70),$t=a(At),Lt=i(71),Vt=a(Lt),Dt=i(72),Rt=a(Dt),Ut=i(73),xt=a(Ut),Nt=i(74),jt=a(Nt),Bt=i(75),Ft=a(Bt),Wt=i(76),Yt=a(Wt),zt=i(77),Gt=a(zt),qt=i(78),Ht=a(qt),Kt=i(79),Qt=a(Kt),Jt=i(80),Zt=a(Jt),Xt=i(81),ei=a(Xt),ti=i(82),ii=a(ti),ai=i(83),ni=a(ai),ri=i(84),oi=a(ri),si=i(85),li=a(si),ci=i(86),ui=a(ci),di=i(87),hi=a(di),pi=i(88),mi=a(pi),vi=i(89),gi=a(vi),fi=i(90),bi=a(fi),yi=i(91),ki=a(yi),Si=i(92),wi=a(Si),_i=i(93),Mi=a(_i),Oi=i(94),Ci=a(Oi),Ii=i(95),Ti=a(Ii),Pi=i(96),Ei=a(Pi),Ai=i(97),$i=a(Ai),Li=i(98),Vi=a(Li),Di=i(99),Ri=a(Di),Ui=i(100),xi=a(Ui),Ni=i(101),ji=a(Ni),Bi=i(102),Fi=a(Bi),Wi=i(103),Yi=a(Wi),zi=i(104),Gi=a(zi),qi=i(105),Hi=a(qi),Ki=i(106),Qi=a(Ki),Ji=i(107),Zi=a(Ji),Xi=i(108),ea=a(Xi),ta=i(111),ia=a(ta),aa=i(112),na=a(aa),ra=i(113),oa=a(ra),sa=i(114),la=a(sa),ca=i(115),ua=a(ca),da=i(116),ha=a(da),pa=i(117),ma=a(pa),va=i(118),ga=a(va),fa=i(119),ba=a(fa),ya=i(120),ka=a(ya),Sa=i(121),wa=a(Sa),_a=i(122),Ma=a(_a),Oa=i(123),Ca=a(Oa),Ia=i(124),Ta=a(Ia),Pa=i(125),Ea=a(Pa),Aa=i(126),$a=a(Aa),La=i(127),Va=a(La),Da=i(128),Ra=a(Da),Ua=i(129),xa=a(Ua),Na=i(130),ja=a(Na),Ba=i(131),Fa=a(Ba),Wa=i(132),Ya=a(Wa),za=i(133),Ga=a(za),qa=i(134),Ha=a(qa),Ka=i(135),Qa=a(Ka),Ja=i(136),Za=a(Ja),Xa=i(137),en=a(Xa),tn=i(138),an=a(tn),nn=i(139),rn=a(nn),on=i(140),sn=a(on),ln=i(141),cn=a(ln);angular.module("volumio",["volumio.constant","ui.bootstrap-slider","ui.bootstrap","toastr","ngDraggable","ui.select","frapontillo.bootstrap-switch","ui.router","matchmedia-ng","hmTouchEvents","ngFileUpload","pascalprecht.translate","LocalStorageModule","cg.mailchimp","cfp.loadingBar","ngTouch","ngSanitize","ngLetterAvatar","angular-country-select","720kb.datepicker","firebase","stripe.checkout"]).config(r["default"]).config(s["default"]).run(c["default"]).service("socketService",d["default"]).service("playerService",p["default"]).service("browseService",v["default"]).service("playlistService",y["default"]).service("playQueueService",f["default"]).service("multiRoomService",S["default"]).service("toastMessageService",_["default"]).service("updaterService",O["default"]).service("modalService",I["default"]).service("modalService",I["default"]).service("modalListenerService",P["default"]).service("audioOutputsService",A["default"]).service("matchmediaService",L["default"]).service("mockService",R["default"]).service("ripperService",x["default"]).service("uiSettingsService",j["default"]).service("devService",F["default"]).service("deviceEndpointsService",Y["default"]).service("cloudService",G["default"]).service("redirectService",H["default"]).service("angularFireService",Q["default"]).service("authService",Z["default"]).service("paymentsService",ee["default"]).service("stripeService",ie["default"]).service("paddleService",ne["default"]).service("databaseService",oe["default"]).service("productsService",le["default"]).service("remoteStorageService",ue["default"]).service("myVolumioDevicesService",he["default"]).service("firebaseApiFunctionsService",me["default"]).service("statisticsService",ge["default"]).service("growSurfService",be["default"]).provider("themeManager",ke["default"]).provider("themeManager",ke["default"]).directive("playerButtons",["themeManager",function(e){return new we["default"](e)}]).directive("volumeManager",["themeManager",function(e){return new Me["default"](e)}]).directive("trackManager",["themeManager","$log",function(e,t){return new Ce["default"](e,t)}]).directive("trackInfo",["themeManager",function(e){return new Te["default"](e)}]).directive("playerStatus",function(){return new Ee["default"]}).directive("sideMenu",function(){return new $e["default"]}).directive("audioOutputs",function(){return new Ve["default"]}).directive("knob",function(){return new Re["default"]}).directive("multiRoomDock",["themeManager",function(e){return new xe["default"](e)}]).directive("airplayScrim",function(){return new je["default"]}).directive("waitBackendScrim",function(){return new Fe["default"]}).directive("playerLogger",function(){return new Ye["default"]}).directive("playlist",["themeManager",function(e){return new Ge["default"](e)}]).directive("browseScrollManager",["browseService","matchmediaService",function(e,t){return new He["default"](e,t)}]).directive("browseHamburgerMenu",function(){return new Qe["default"]}).directive("trackInfoBar",function(){return new Ze["default"]}).directive("trackInfoBarButtons",function(){return new et["default"]}).directive("equalizer",function(){return new it["default"]}).directive("pluginAttributes",function(){return new kt["default"]}).directive("favouriteTrackBtn",["themeManager",function(e){return new ht["default"](e)}]).directive("addTrackToPlaylistBtn",["themeManager",function(e){return new mt["default"](e)}]).directive("trackActionsBtn",["themeManager",function(e){return new gt["default"](e)}]).directive("lightSwitchBtn",["themeManager",function(e){return new bt["default"](e)}]).directive("mainMenu",["themeManager",function(e){return new ot["default"](e)}]).directive("onCloudActions",["themeManager",function(e){return new lt["default"](e)}]).directive("playerSeekbar",["themeManager",function(e){return new ut["default"](e)}]).directive("stripePayButton",function(){return new Mt["default"]}).directive("paddlePayButton",function(){return new Ct["default"]}).directive("myVolumioUserCard",function(){return new Tt["default"]}).directive("myVolumioBackButton",function(){return new Et["default"]}).directive("myVolumioAlreadyLogged",function(){return new $t["default"]}).directive("myVolumioCurrentPlanCard",function(){return new Vt["default"]}).directive("myVolumioFileOnChange",function(){return new Rt["default"]}).directive("myVolumioAvatarImage",function(){return new xt["default"]}).directive("myVolumioPlanCard",function(){return new jt["default"]}).directive("myVolumioVerificationCard",function(){return new Ft["default"]}).directive("myVolumioDeviceSelector",function(){return new Yt["default"]}).directive("growsurfReferralCard",function(){return new Gt["default"]}).controller("HeaderController",Ht["default"]).controller("LayoutController",Qt["default"]).controller("FooterController",Zt["default"]).controller("DebugController",ei["default"]).controller("StaticPageController",ii["default"]).controller("IframePageController",ni["default"]).controller("MultiRoomManagerController",oi["default"]).controller("PluginController",gi["default"]).controller("PluginManagerController",bi["default"]).component("pluginComponent",new wt["default"]).controller("BrowseController",li["default"]).controller("BrowseMusicController",ui["default"]).controller("PlaybackController",hi["default"]).controller("PlayQueueController",mi["default"]).controller("WizardController",ki["default"]).controller("ModalController",nt["default"]).controller("ModalPlaylistController",Ci["default"]).controller("ModalWebRadioController",Ti["default"]).controller("ModalPowerOffController",Ei["default"]).controller("ModalSleepController",$i["default"]).controller("ModalAlarmClockController",Vi["default"]).controller("ModalUpdaterController",Ri["default"]).controller("ModalProgressCustomController",xi["default"]).controller("ModalGotitController",ji["default"]).controller("ModalConfirmController",Fi["default"]).controller("ModalRipperController",Yi["default"]).controller("ModalCustomController",Gi["default"]).controller("ModalPasswordController",Hi["default"]).controller("ModalKaraokeController",Qi["default"]).controller("ModalPluginInstallerController",Zi["default"]).controller("ModalTrackManagerActionsController",ea["default"]).controller("ModalNetwordDrivesPasswordController",ia["default"]).controller("ModalCryptoController",na["default"]).controller("MyVolumioTermsModalController",oa["default"]).controller("MyVolumioPayingModalController",la["default"]).controller("WifiPluginController",ha["default"]).controller("NetworkStatusPluginController",ma["default"]).controller("MyMusicPluginController",ga["default"]).controller("NetworkDrivesPluginController",ba["default"]).controller("SystemVersionPluginController",ka["default"]).controller("FirmwareUploadPluginController",wa["default"]).controller("UiSettingsPluginController",Ma["default"]).controller("MyMusicPluginEnablerController",Ca["default"]).controller("ModalCreditsDetailsController",ua["default"]).controller("HomeController",wi["default"]).controller("SettingsController",Mi["default"]).controller("MyVolumioLoginController",Ta["default"]).controller("MyVolumioSignupController",Ea["default"]).controller("MyVolumioSignupNewController",$a["default"]).controller("MyVolumioPremiumStreamingController",Va["default"]).controller("MyVolumioProfileController",Ra["default"]).controller("MyVolumioPlansController",xa["default"]).controller("MyVolumioSubscribeController",ja["default"]).controller("MyVolumioPaymentSuccessController",Fa["default"]).controller("MyVolumioPaymentFailController",Ya["default"]).controller("MyVolumioRecoverPasswordController",Ga["default"]).controller("MyVolumioEditProfileController",Ha["default"]).controller("MyVolumioVerifyUserController",Qa["default"]).controller("MyVolumioCancelSubscriptionController",Za["default"]).controller("MyVolumioChangeSubscriptionController",en["default"]).controller("MyVolumioCloudSelectDeviceController",an["default"]).controller("MyVolumioAccessController",rn["default"]).controller("MyVolumioReferralController",sn["default"]).controller("MyVolumioWelcomeController",cn["default"])},function(e,t){"use strict";function i(e,t,i,a,n,r,o,s,l,c,u,d,h,p,m,v){"ngInject";m.includeSpinner=!1,r.enabled=!0,n.theme=e,n.variant=t,i.debugEnabled(v!==!1),s.html5Mode(!0),l.useApplyAsync(!0),angular.extend(a,{maxOpened:!0,preventOpenDuplicates:!0}),u.setPrefix("volumio"),p.setConfig({username:"volumio",dc:"us11",u:"64b4a843c27713ee9da781aa9",id:"030f96ce5c"}),c.useStaticFilesLoader({prefix:"app/i18n/strings_",suffix:".json"}).fallbackLanguage("en"),c.useSanitizeValueStrategy("sanitizeParameters")}i.$inject=["theme","variant","$logProvider","toastrConfig","themeManagerProvider","$touchProvider","env","$locationProvider","$httpProvider","$translateProvider","localStorageServiceProvider","StripeCheckoutProvider","authServiceProvider","CgMailChimpServiceProvider","cfpLoadingBarProvider","debug"],Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=i,e.exports=t["default"]},function(e,t){"use strict";function i(e,t,i,a){"ngInject";console.info("[TEME]: "+a.theme,"[VARIANT]: "+a.variant);i.html5Mode(!0),e.state("volumio",{url:"/","abstract":!0,views:{layout:{templateUrl:a.getHtmlPath("layout"),controller:"LayoutController",controllerAs:"layout"},"header@volumio":{templateUrl:a.getHtmlPath("header"),controller:"HeaderController",controllerAs:"header"},"footer@volumio":{templateUrl:a.getHtmlPath("footer"),controller:"FooterController",controllerAs:"footer"}},resolve:{dependenciesResolver:["$rootScope","ripperService","modalListenerService","toastMessageService","uiSettingsService","updaterService",function(e,t,i,a,n,r){}],socketResolver:["$rootScope","deviceEndpointsService","$q","$document",function(e,t,i,a){var n=i.defer();return t.initSocket().then(function(e){return e===!1?void n.reject("NO_SOCKET_ENDPOINTS"):(a[0].body.classList.remove("myVolumioBkg"),void n.resolve(e))}),n.promise}]}}).state("volumio.browse",{url:"browse",params:{source:null},views:{"content@volumio":{templateUrl:a.getHtmlPath("browse-music"),controller:"BrowseMusicController",controllerAs:"browse"}}}).state("volumio.play-queue",{url:"queue",views:{"content@volumio":{templateUrl:a.getHtmlPath("play-queue"),controller:"PlayQueueController",controllerAs:"playQueue"}}}).state("volumio.playback",{url:"playback",views:{"content@volumio":{templateUrl:a.getHtmlPath("playback"),controller:"PlaybackController",controllerAs:"playback"}}}).state("volumio.debug",{url:"debug",views:{"content@volumio":{templateUrl:"app/components/debug/volumio-debug.html",controller:"DebugController",controllerAs:"debug"}}}).state("volumio.multi-room",{url:"multi-room",views:{"content@volumio":{templateUrl:"app/themes/axiom/multi-room-manager/axiom-multi-room-manager.html",controller:"MultiRoomManagerController",controllerAs:"multiRoomManager"}}}).state("volumio.plugin",{url:"plugin/:pluginName",params:{isPluginSettings:null},views:{"content@volumio":{templateUrl:"app/plugin/plugin.html",controller:"PluginController",controllerAs:"plugin"}}}).state("volumio.plugin-manager",{url:"plugin-manager",views:{"content@volumio":{templateUrl:"app/plugin-manager/plugin-manager.html",controller:"PluginManagerController",controllerAs:"pluginManager"}}}).state("volumio.home",{url:"home",views:{"content@volumio":{templateUrl:a.getHtmlPath("home"),controller:"HomeController",controllerAs:"home"}}}).state("volumio.search",{url:"search",params:{isDedicatedSearch:!0},views:{"content@volumio":{templateUrl:a.getHtmlPath("browse-music"),controller:"BrowseMusicController",controllerAs:"browse"}}}).state("volumio.settings",{url:"settings",views:{"content@volumio":{templateUrl:a.getHtmlPath("settings"),controller:"SettingsController",controllerAs:"settings"}}}).state("myvolumio",{url:"/myvolumio","abstract":!0,views:{layout:{templateUrl:a.getHtmlPath("layout"),controller:"LayoutController",controllerAs:"layout"},"header@myvolumio":{templateUrl:a.getHtmlPath("header"),controller:"HeaderController",controllerAs:"header"},"footer@myvolumio":{templateUrl:a.getHtmlPath("footer"),controller:"FooterController",controllerAs:"footer"}},resolve:{dependenciesResolver:["$rootScope","modalListenerService","toastMessageService","uiSettingsService",function(e,t,i,a){return!0}],socketResolver:["$rootScope","deviceEndpointsService","$q","uiSettingsService","$document",function(e,t,i,a,n){var r=i.defer();return t.setCloudAutoConnectValue(!1),n[0].body.classList.add("myVolumioBkg"),t.initSocket().then(function(e){a.setLanguage(),r.resolve(!0)})["catch"](function(e){r.resolve(!1)}),r.promise}],authEnabled:["authService","$q",function(e,t){var i=t.defer();return e.isAuthEnabled().then(function(e){e?i.resolve(!0):i.reject("MYVOLUMIO_NOT_ENABLED")}),i.promise}]}}).state("myvolumio.login",{url:"/login",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/login/myvolumio-login.html",controller:"MyVolumioLoginController",controllerAs:"myVolumioLoginController",resolve:{user:["authService",function(e){return e.requireNullUserOrRedirect()}]}}}}).state("myvolumio.logout",{url:"/logout",onEnter:["authService","$state","redirectService",function(e,t,i){e.logOut().then(function(){return i.stateGo("myvolumio.access"),!0})}]}).state("myvolumio.signupOld",{url:"/signup-old",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/signup/myvolumio-signup.html",controller:"MyVolumioSignupController",controllerAs:"myVolumioSignupController",resolve:{user:["authService",function(e){return e.requireNullUserOrRedirect()}]}}}}).state("myvolumio.signup",{url:"/signup",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/signup-new/myvolumio-signup-new.html",controller:"MyVolumioSignupNewController",controllerAs:"MyVolumioSignupNewController",resolve:{user:["authService",function(e){return null}]}}}}).state("myvolumio.premiumStreaming",{url:"/premium-streaming/:serviceName",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/premium-streaming/myvolumio-premium-streaming.html",controller:"MyVolumioPremiumStreamingController",controllerAs:"MyVolumioPremiumStreamingController",resolve:{user:["authService",function(e){return null}]}}}}).state("myvolumio.access",{url:"/access",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/access/myvolumio-access.html",controller:"MyVolumioAccessController",controllerAs:"myVolumioAccessController",resolve:{user:["authService",function(e){return e.requireNullUserOrRedirect()}]}}}}).state("myvolumio.profile",{url:"/profile",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/profile/myvolumio-profile.html",controller:"MyVolumioProfileController",controllerAs:"myVolumioProfileController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.edit-profile",{url:"/profile/edit",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/edit-profile/myvolumio-edit-profile.html",controller:"MyVolumioEditProfileController",controllerAs:"myVolumioEditProfileController",resolve:{user:["authService",function(e){return e.requireUser()}]}}}}).state("myvolumio.plans",{url:"/plans",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/plans/myvolumio-plans.html",controller:"MyVolumioPlansController",controllerAs:"myVolumioPlansController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.subscribe",{url:"/subscribe/:plan/:planDuration",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/subscribe/myvolumio-subscribe.html",controller:"MyVolumioSubscribeController",controllerAs:"myVolumioSubscribeController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.payment-success",{url:"/payment/success",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/payment-success/myvolumio-payment-success.html",controller:"MyVolumioPaymentSuccessController",controllerAs:"myVolumioPaymentSuccessController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.payment-fail",{url:"/payment/fail",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/payment-fail/myvolumio-payment-fail.html",controller:"MyVolumioPaymentFailController",controllerAs:"myVolumioPaymentFailController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.recover-password",{url:"/recover-password",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/recover-password/myvolumio-recover-password.html",controller:"MyVolumioRecoverPasswordController",controllerAs:"myVolumioRecoverPasswordController",resolve:{user:["authService",function(e){return e.waitForUser()}]}}}}).state("myvolumio.verify-user",{url:"/profile/verify",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/verify-user/myvolumio-verify-user.html",controller:"MyVolumioVerifyUserController",controllerAs:"myVolumioVerifyUserController",resolve:{user:["authService",function(e){return e.requireUser()}]}}}}).state("myvolumio.cancel-subscription",{url:"/subscription/cancel",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/cancel-subscription/myvolumio-cancel-subscription.html",controller:"MyVolumioCancelSubscriptionController",controllerAs:"myVolumioCancelSubscriptionController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.change-subscription",{url:"/subscription/change/:plan/:planDuration",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/change-subscription/myvolumio-change-subscription.html",controller:"MyVolumioChangeSubscriptionController",controllerAs:"myVolumioChangeSubscriptionController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.referral",{url:"/profile/referral",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/referral/myvolumio-referral.html",controller:"MyVolumioReferralController",controllerAs:"myVolumioReferralController",resolve:{user:["authService",function(e){return e.requireVerifiedUserOrRedirect()}]}}}}).state("myvolumio.welcome",{url:"/welcome",views:{"content@myvolumio":{templateUrl:"app/components/myvolumio/welcome/myvolumio-welcome.html",controller:"MyVolumioWelcomeController",controllerAs:"myVolumioWelcomeController"}}}).state("volumio.static-page",{url:"static-page/:pageName",views:{"content@volumio":{templateUrl:"app/static-pages/static-page.html",controller:"StaticPageController",controllerAs:"staticPage"}}}).state("volumio.iframe-page",{url:"iframe-page/:url",views:{"content@volumio":{templateUrl:"app/iframe-pages/iframe-page.html",controller:"IframePageController",controllerAs:"iframePage"}}}).state("redirect",{url:"/redirect",views:{layout:{template:"",controller:["$state","cloudService","redirectService","$location",function(e,t,i,a){var n=a.url().split("?")[1];return t.isCloudReferralLink===!0?void i.urlGo("myvolumio/welcome",n):t.isOnCloud===!0?void i.urlGo("myvolumio/access",n):void i.urlGo("indexstate-redirect",n)}]}}}).state("volumio.redirect",{url:"indexstate-redirect",views:{"content@volumio":{template:"",controller:["$state","uiSettingsService","browseService","$stateParams","$window","redirectService","$location",function(e,t,i,a,n,r,o){var s=o.url().split("?")[1];t.initService().then(function(e){e&&e.indexState?e.indexStateHome?(i.backHome(),r.urlGo(""+e.indexState,s)):r.urlGo(""+e.indexState,s):r.urlGo("playback",s)})}],controllerAs:"redirect"}}}).state("volumio.wizard",{url:"wizard",views:{"content@volumio":{templateUrl:"app/wizard/wizard.html",controller:"WizardController",controllerAs:"wizard"}}}),t.otherwise(function(e,t){var i=t.url().split("?")[1],a=i&&i.length?"/redirect?"+i:"/redirect";return a})}i.$inject=["$stateProvider","$urlRouterProvider","$locationProvider","themeManagerProvider"],Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=i,e.exports=t["default"]},function(e,t){"use strict";function i(e,t,i,a){"ngInject";e.setPageMetadata(),i.state=t,i.$on("$stateChangeError",function(e,i,n,r,o,s){return e.preventDefault(),"MYVOLUMIO_NOT_ENABLED"===s?void t.go("volumio.browse"):"MYVOLUMIO_REQUIRED"===s?void t.go("myvolumio.access"):"AUTH_REQUIRED"===s?void t.go("myvolumio.access"):"NO_SOCKET_ENDPOINTS"===s&&a.isOnCloud?void t.go("myvolumio.access"):"MYVOLUMIO_USER_ALREADY_LOGGED"===s?void t.go("myvolumio.profile"):void 0})}i.$inject=["themeManager","$state","$rootScope","cloudService"],Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=i,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i1){var i=t.findIndex(function(t){return e.hosts[t]===e.host});++i>=t.length&&(i=0);var a=this.hosts[t[i]];this.$log.info("Try to connect to host: "+t[i]+": "+a),this.host=a}}},{key:"on",value:function(e,t){var i=this;return this.$window.socket.on(e,function(a){i.stopLoadingBar(e),i.$rootScope.$apply(function(){t&&t(a)})})}},{key:"off",value:function(e,t){this.$window.socket.off(e,t)}},{key:"emit",value:function(e,t,i){var a=this;this.startLoadingBar(e),this.$window.socket.emit(e,t,function(e){a.$rootScope.$apply(function(){i&&i(e)})})}},{key:"connect",value:function(e){var t=this;this.$window.socket.on("connect",function(){t.$log.debug("Socket connected to "+t.host),e()})}},{key:"reconnect",value:function(e){var t=this;this.$window.socket.on("reconnect",function(){t.$log.debug("Socket reconnect"),t.$rootScope.$emit("socket:reconnect"),e()})}},{key:"disconnect",value:function(e){var t=this;this.$window.socket.on("disconnect",function(i){t.$log.debug("Socket disconnect"),e(i)})}},{key:"startLoadingBar",value:function(e){this.loadingBarEnabled&&this.loadingBarRequestEvents.includes(e)&&this.loadingBar.start()}},{key:"stopLoadingBar",value:function(e){this.loadingBarResponseEvents.includes(e)&&this.loadingBar.complete()}},{key:"isConnected",get:function(){return this.$window.socket.connected}},{key:"host",set:function(e){this._host=e,this.changeHost(e),this.$log.debug("New host: "+this._host)},get:function(){return this._host}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;ia?"0"+a:a)}},{key:"startSeek",value:function(){var e=this;this.stopSeek(),this.intervalHandler=this.$interval(function(){e.elapsedTime+=e._thick,e.updateSeek()},this._thick)}},{key:"updateSeek",value:function(){this.seekPercent=this.calculateSeekPercent(),this.calculateElapsedTimeString(),this.seekPercent>=this._seekScale&&(this.stopSeek(),this.seekPercent=0)}},{key:"stopSeek",value:function(){this.intervalHandler&&this.$interval.cancel(this.intervalHandler)}},{key:"getRemoteDbVolume",value:function(){return this.state&&void 0!==this.state.dbVolume?parseFloat(this.state.dbVolume):null}},{key:"isDbVolumeAvailable",value:function(){return null!==this._dbVolume&&!isNaN(this._dbVolume)}},{key:"getDbVolume",value:function(){return null!==this._dbVolume?this._dbVolume.toFixed(1):!1}},{key:"getAlbumart",value:function(e){return e?~e.indexOf("http")?e:""+this.socketService.host+e:""}},{key:"init",value:function(){this.registerListner(),this.initService()}},{key:"updatePageTitle",value:function(){this.pageTitle="","play"!==this.state.status||!this.state.artist&&!this.state.title?this.pageTitle=this.uiSettingsService.defaultPageTitle:(this.state.artist&&(this.pageTitle=this.state.artist),this.state.title&&(this.pageTitle+=this.pageTitle?" - "+this.state.title:this.state.title)),this.pageTitle&&(this.$document[0].title=this.pageTitle)}},{key:"updateFavicon",value:function(){"volumio"===this.themeManager.theme&&(this.$rootScope.favicon="play"===this.state.status?""+this.$rootScope.variantAssetsUrl+"/favicons/favicon-play.png":"pause"===this.state.status?""+this.$rootScope.variantAssetsUrl+"/favicons/favicon-pause.png":""+this.$rootScope.variantAssetsUrl+"/favicons/favicon.png")}},{key:"loadFileFormatIcon",value:function(e){var t,i;if(i=e?e:this.state.trackType)switch(i){case"dff":t={url:"dsd",name:"dff dsd"};break;case"dsf":t={url:"dsd",name:"dsf dsd"};break;case"ogg":t={url:"ogg",name:"oga vorbis"};break;case"oga":t={url:"ogg",name:"ogg vorbis"};break;case"wv":t={url:"wavpack",name:"wavpack"};break;case"aac":case"aiff":case"alac":case"dsd":case"dts": case"flac":case"m4a":case"mp3":case"mp4":case"opus":case"spotify":case"wav":case"wawpack":case"airplay":case"YouTube":case"rr":case"bt":case"cd":case"tidal":case"qobuz":case"mg":case"mb":case"wma":case"qobuz":case"tidal":t={url:i,name:i};break;default:this.state.fileFormat=null}else this.state.fileFormat=null;return e?t:void(this.state.fileFormat=t)}},{key:"registerListner",value:function(){var e=this;this.socketService.on("pushState",function(t){if(e.$log.debug("pushState",t),e.state=t,e.state.disableUi=e.state.disableUiControls||"analogin"===e.state.service,e.elapsedTime=e.state.seek,"play"===e.state.status?e.startSeek():"stop"===e.state.status?(e.stopSeek(),e.elapsedTimeString="0:00",e.updateSeek()):"pause"===e.state.status&&(e.stopSeek(),e.updateSeek()),e.state.duration){e.songLength=Math.floor(e.state.duration/60);var i=e.state.duration%60;i=1===String(i).length?"0"+i:i,e.songLength+=":"+i}else e.elapsedTimeString=void 0,e.songLength=void 0;e.mute=t.mute,e.disableVolumeControl=t.disableVolumeControl,e.$rootScope.$broadcast("socket:pushState",e.state),e.updatePageTitle(),e.updateFavicon(),e.loadFileFormatIcon()}),this.socketService.on("pushTrackInfo",function(t){e.$log.debug("pushTrackInfo",t),e.trackInfo=t}),this.socketService.on("pushGetSeek",function(t){e.$log.debug("pushGetSeek",t),e.seek=t}),this.socketService.on("urifavourites",function(t){e.$log.debug("urifavourites",t),e.favourite=t})}},{key:"initService",value:function(){this.socketService.emit("getState"),this.socketService.emit("getTrackInfo"),this.socketService.emit("getSeek")}},{key:"seek",set:function(e){if(this.state&&!this.state.disableUi){this.stopSeek();var t=Math.ceil(this.state.duration/this._seekScale*e);this.socketService.emit("seek",t)}},get:function(){return null}},{key:"duration",get:function(){return this.state.duration}},{key:"remoteVolume",get:function(){return this.state?parseInt(this.state.volume):0},set:function(e){0>e?e=0:e>100&&(e=100),this.$log.debug("volume",e),this.socketService.emit("volume",e)}},{key:"volume",get:function(){return Date.now()-this.lastVolumeUpdateTime>1e3&&(this.localVolume=this.remoteVolume),Date.now()-this.lastVolumeUpdateTime>100&&(this._dbVolume=this.getRemoteDbVolume()),this.localVolume},set:function(e){Date.now()-this.lastVolumeUpdateTime>100&&this.localVolume!==e&&(this.lastVolumeUpdateTime=Date.now(),this.remoteVolume=e),this.localVolume=e}},{key:"albumart",get:function(){return this.state&&this.state.albumart?this.getAlbumart(this.state.albumart):null}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i1?(this.lists=this.navigationStack[e-2].lists,this.lastBrowseLists=this.navigationStack[e-2].lists,this.info=this.navigationStack[e-2].info,this.breadcrumbs=this.navigationStack[e-2].prev,this.eject=this.navigationStack[e-2].eject,this.rip=this.navigationStack[e-2].rip,this.navigationStack.pop(),this.$rootScope.$broadcast("browseService:fetchEnd"),this.currentFetchRequest=this.navigationStack[e-2]):(this.navigationStack=[],this.backHome())}},{key:"removeLocationHash",value:function(){var e=window.location.href.replace(/#.*$/,"");window.history.replaceState("",document.title,e)}},{key:"sendEject",value:function(e){this.socketService.emit("callMethod",e),this.$rootScope.$broadcast("browseService:eject"),this.backHome()}},{key:"sendRip",value:function(e){this.socketService.emit("callMethod",e)}},{key:"backHome",value:function(){this.isBrowsing=!1,this.isSearching=!1,this.lists=[],this.historyUri=[],this.currentFetchRequest={},this.scrollPositions.clear()}},{key:"goTo",value:function(e){var t=this;this.$log.debug("goTo",e),this.backHome(),this.$timeout(function(){t.isSearching=!0,t.isBrowsing=!1,t.socketService.emit("goTo",e)},0)}},{key:"filterBy",value:function(e){this.filterBy===e&&(e="all"),this.filterBy=e}},{key:"canShowGridView",value:function(e){return 1===e.availableListViews.length?"grid"===e.availableListViews[0]:this.uiSettingsService.isMemorySavingTouchUiEnabled()?!1:this.showGridView&&~e.availableListViews.indexOf("grid")?!0:!1}},{key:"toggleGridView",value:function(){this.showGridView=!this.showGridView}},{key:"init",value:function(){this.registerListner(),this.initService()}},{key:"registerListner",value:function(){var e=this;this.socketService.on("pushBrowseFilters",function(t){e.$log.debug("pushBrowseFilters",t),e.filters=t}),this.socketService.on("pushBrowseSources",function(t){e.availableListViews=["list"];for(var i=0;i1)return!0;return!1}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i"+e+this.log}},{key:"clear",value:function(){this.log=""}},{key:"init",value:function(){this.registerListner(),this.initService()}},{key:"registerListner",value:function(){var e=this;this.socketService.on("printConsoleMessage",function(t){e.pushLog(t)})}},{key:"initService",value:function(){}},{key:"log",get:function(){return this._log},set:function(e){this._log=e}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;iThe Beatles were an iconic rock group from Liverpool, England. They are frequently cited as the most commercially successful and critically acclaimed band in modern history, with innovative music, a cultural impact that helped define the 1960s and an enormous influence on music that is still felt today. Currently, The Beatles are one of the two musical acts to sell more than 1 billion records, with only Elvis Presley having been able to achieve the same feat.

\n

After conquering Europe, with successful tours to Germany and Sweden, the Beatles led the mid-1960s musical 'British Invasion' into the United States. Although their initial musical style was rooted in 1950s rock and roll and homegrown skiffle, the group explored a great variety of musical styles including Psychedelic Rock, Experimental, Ballads, Western and Indian Classical among others. Their clothes, hairstyles, and statements made them trend-setters, while their growing social awareness saw their influence extend into the social and cultural revolutions of the 1960s.

\n ",service:"mpd",type:"artist",genre:"Pop",local_albums:2,streaming_albums:132,albumart:"https://lastfm.freetls.fastly.net/i/u/770x0/d586183f5e3fc6f578e753e0a3e29c79.jpg#d586183f5e3fc6f578e753e0a3e29c79",favorite:!1,credits:[{key:"drums (drum set)",values:[{name:"Phil Rudd",uri:"mbid:/artist/9e01d7c2-e322-4e24-a0fb-24e986523c01"}]},{key:"bass",values:[{name:"Cliff Williams",uri:"mbid:/artist/44bb6793-2fa2-40be-9377-0bd0242368da"}]},{key:"guitar",values:[{name:"Angus Young",uri:"mbid:/artist/a0a54c69-b0d2-4d2a-bcf8-994b8846b0d8"},{name:"Malcolm Young",uri:"mbid:/artist/ea719716-da05-46f8-bbd5-cc5803db3d0e"}]}],availableListViews:["list","grid"]},lists:[{title:"Local albums",icon:"",items:[{service:"mpd",type:"folder",title:"Abbey Road (Anniversary Edition)",artist:"",albumart:"https://lastfm.freetls.fastly.net/i/u/770x0/307370ac9c7cb089bcd6f60f1222f7c2.jpg#307370ac9c7cb089bcd6f60f1222f7c2",uri:"artists:///Abbey%20Road%20(Anniversary%20Edition)",meta:"Jun 2014",genre:"Pop rock",extensionIcon:"https://resources.mynewsdesk.com/image/upload/c_limit,dpr_2.0,f_auto,h_700,q_auto,w_1400/slza5xaljuypmtrtgnbo.jpg",favorite:!0,tracks:[{uri:"music-library/INTERNAL/The Beatles - Abbey Road (Anniversary Edition 2 CD 2019) [FLAC]/CD 1/01 - Come Together.flac",service:"mpd",title:"Come Together",artist:"The Beatles",album:"Abbey Road (Anniversary Edition)",type:"song",tracknumber:"1",duration:260,trackType:"flac",favorite:!1},{uri:"music-library/INTERNAL/The Beatles - Abbey Road (Anniversary Edition 2 CD 2019) [FLAC]/CD 1/02 - Something.flac",service:"mpd",title:"Something",artist:"The Beatles",album:"Abbey Road (Anniversary Edition)",type:"song",tracknumber:"2",duration:182,trackType:"flac",favorite:!1},{uri:"music-library/INTERNAL/The Beatles - Abbey Road (Anniversary Edition 2 CD 2019) [FLAC]/CD 1/04 - Oh! Darling.flac",service:"mpd",title:"Oh! Darling",artist:"The Beatles",album:"Abbey Road (Anniversary Edition)",type:"song",tracknumber:"4",duration:207,trackType:"flac",favorite:!0},{uri:"music-library/INTERNAL/The Beatles - Abbey Road (Anniversary Edition 2 CD 2019) [FLAC]/CD 1/05 - Octopus's Garden.flac",service:"mpd",title:"Octopus's Garden",artist:"The Beatles",album:"Abbey Road (Anniversary Edition)",type:"song",tracknumber:"5",duration:171,trackType:"flac",favorite:!1},{uri:"music-library/INTERNAL/The Beatles - Abbey Road (Anniversary Edition 2 CD 2019) [FLAC]/CD 1/06 - I Want You (She's So Heavy).flac",service:"mpd",title:"I Want You (She's So Heavy)",artist:"The Beatles",album:"Abbey Road (Anniversary Edition)",type:"song",tracknumber:"6",duration:467,trackType:"flac",favorite:!1}]}]}]},getAlbumPageContent:{info:{uri:"album://Abbey%20Road%20(Remastered)",album:"Abbey Road (Remastered)",artist:"The Beatles",description:'\n

Abbey Road is the eleventh studio album by English rock band the Beatles, released on 26 September 1969 by Apple Records. The recording sessions for the album were the last in which all four Beatles participated. Although Let It Be was the final album that the Beatles completed before the band\'s dissolution in April 1970, most of the album had been recorded before the Abbey Road sessions began. A two-sided hit single from the album, "Something" backed with "Come Together", released in October, topped the Billboard Hot 100 chart in the US.

\n

Abbey Road is a rock album that incorporates genres such as blues, pop, and progressive rock, and it makes prominent use of the Moog synthesizer and the Leslie speaker. Side two contains a medley of song fragments edited together to form a single piece. The album was recorded amid a more enjoyable atmosphere than the Get Back/Let It Be sessions earlier in the year, but there were still frequent disagreements within the band. John Lennon had privately left the group by the time the album was released and McCartney publicly quit the following year.

\n ',service:"mpd",type:"album",genre:"Pop",duration:"99:23",year:"Sep 2019",favorite:!0,albumart:"https://lastfm.freetls.fastly.net/i/u/770x0/e97046f5bc772a726c602cc2e01830c0.webp#e97046f5bc772a726c602cc2e01830c0",credits:[{key:"drums (drum set)",values:[{name:"Phil Rudd",uri:"mbid:/artist/9e01d7c2-e322-4e24-a0fb-24e986523c01"}]},{key:"bass",values:[{name:"Cliff Williams",uri:"mbid:/artist/44bb6793-2fa2-40be-9377-0bd0242368da"}]},{key:"guitar",values:[{name:"Angus Young",uri:"mbid:/artist/a0a54c69-b0d2-4d2a-bcf8-994b8846b0d8"},{name:"Malcolm Young",uri:"mbid:/artist/ea719716-da05-46f8-bbd5-cc5803db3d0e"}]}],availableListViews:["list"]}}},wizard:{steps:["Language","Name","Output","Network","Music","Done"],language:{defaultLanguage:{code:"en",language:"English"},available:[{code:"en",language:"English"},{code:"it",language:"Italiano"},{code:"fr",language:"French"}]},deviceName:{name:"volumio"},outputDevices:{devices:[{id:1,name:"Out 1"},{id:2,name:"Out 2"}],i2s:[{id:1,name:"Out i2s 1"},{id:2,name:"Out i2s 2"}]},donation:{donationAmount:20,customAmount:150,amounts:[10,20,50,100]}},networkSharesDiscovery:{nas:[{name:"VOLUMIO",shares:[{sharename:"IPC$",path:"VOLUMIO/IPC$"},{sharename:"NAS",path:"VOLUMIO/NAS"},{sharename:"USB",path:"VOLUMIO/USB"}]},{name:"FRITZ-NAS",shares:[{sharename:"IPC$",path:"FRITZ-NAS/IPC$"},{sharename:"FRITZ.NAS",path:"FRITZ-NAS/FRITZ.NAS"}]},{name:"DISKSTATION",shares:[{sharename:"IPC$",path:"DISKSTATION/IPC$"},{sharename:"video",path:"DISKSTATION/video"},{sharename:"Torrent",path:"DISKSTATION/Torrent"},{sharename:"Programmi",path:"DISKSTATION/Programmi"},{sharename:"photo",path:"DISKSTATION/photo"},{sharename:"NetBackup",path:"DISKSTATION/NetBackup"},{sharename:"music",path:"DISKSTATION/music"},{sharename:"Mi",path:"DISKSTATION/Mi"},{sharename:"IMGs",path:"DISKSTATION/IMGs"},{sharename:"homes",path:"DISKSTATION/homes"},{sharename:"FLAC",path:"DISKSTATION/FLAC"},{sharename:"Film",path:"DISKSTATION/Film"},{sharename:"Backup",path:"DISKSTATION/Backup"}]}]},installedPlugins:[{prettyName:"Nome Plugin 1",enabled:!0,active:!0,category:"Category 1",name:"name"},{prettyName:"Nome Plugin 2",enabled:!1,active:!1,category:"Category 2",name:"name2"}],availablePlugins:{metaData:{repoUlr:"fetching ulr",repoStatus:"Up"},categories:[{name:"Music Services ",id:"cat1",description:"Plugins for Adding Music Sources to Volumio",plugins:[{name:"Spotify",version:"1.0",url:"volumio.github.io/volumio-plugins/plugins/volumio/armhf/music_service/spotify/spotify.zip",license:"Free for non commercial USE",description:"plugin 1 desc",author:"Volumio Team",updated:"23-04-2016"},{name:"Another WebRadio Plugin",version:"1.0",url:"volumio.github.io/volumio-plugins/plugins/volumio/armhf/music_service/spotify/spotify.zip",license:"gpl-v3",description:"Adding other WebRadios",author:"Volumio Team",updated:"23-04-2016"}]},{name:"Miscelleanea",id:"cat2",description:"Things that cannot go in other categories",plugins:[{name:"Random thing",version:"1.0",url:"volumio.github.io/volumio-plugins/plugins/volumio/armhf/music_service/spotify/spotify.zip",license:"gpl-v3",description:"Something Random",author:"Volumio Team",updated:"23-04-2016"}]},{name:"System Tools",id:"cat3",description:"Volumio System Tools",plugins:[{name:"Touchscreen display",version:"1.0",url:"volumio.github.io/volumio-plugins/plugins/volumio/armhf/music_service/spotify/spotify.zip",license:"gpl-v3",description:"Use the 7 inches pi display",author:"Volumio Team",updated:"23-04-2016"}]}]},customModals:{title:"titolo in alto della modale",message:"contenuto html

paragraph

",size:"lg",buttons:[{name:"Nome bottone","class":"btn btn-primary",emit:"emit",payload:"payload emit"},{name:"Nome bottone 2","class":"btn btn-primary",emit:"emit 2",payload:"payload emit 2"},{name:"Close","class":"btn btn-warning"}]},ripper:{content:"Content of ripper",title:"Rip Cd",artist:"Noep",album:"Movee",tracks:[{number:1,title:"titolo traccia 1"},{number:2,title:"titolo traccia 2"}]},playlist:[{order:2,prettyname:"Bar Day",path:"bergues-bar-day",intensity:2,description:"Une ambiance sphistiquée aux influences jazzy.",styles:"jazzy, soul, lounge",ambienticons:["fa-building","fa-glass"],createdAt:"2015-11-28T09:44:14.319Z",updatedAt:"2015-11-28T09:44:14.326Z",id:"playlist-test1"},{ambienticons:["fa-building","fa-glass"],createdAt:"2015-11-28T09:40:07.313Z",description:"Im too lazy to go on the web to copy and .....",intensity:1,order:1,path:"bergues-bar-morning",prettyname:"Bar Morning",styles:"jazzy, hip, world",updatedAt:"2015-11-28T09:48:54.036Z",id:"test3"}],networkInfos:[{type:"wireless",ssid:"Mare Nostrum",signal:5,status:"connected",ip:"192.168.1.12",speed:"100M",online:!1},{type:"cable",status:"connected",ip:"192.168.1.120",speed:"1000M",online:!0}],wirelessNetworks:{connectedTo:{signal:5,encryption:"wpa2",ssid:"Mare Nostrum"},available:[{signal:5,encryption:"wpa2",ssid:"miarete1"},{signal:4,encryption:"wpa2",ssid:"AUAUAUA"},{signal:3,encryption:"wep",ssid:"Speck"},{signal:2,encryption:"open",ssid:"asd"},{signal:1,encryption:"open",ssid:"ASD"}]},infoShare:[{name:"SHARE",ip:"192.168.10.35",path:"path",id:"suasianure 2",mounted:"true",size:"40 GB",fstype:"cifs"},{name:"SHARE",ip:"192.168.10.99",path:"path",id:"id nuovo",mounted:"false",size:"450 GB",fstype:"nfs"}],listUsbDrives:[{name:"Transcend 2",size:"2gb",freespace:"3gb"},{name:"Sandisk",size:"2gb",freespace:"3gb"}],myCollectionStats:{artists:"120",albums:"23",songs:"67",playtime:"10h"},getBrowseFilters:[{name:"Genres by Name",index:"index:Genres by Name"},{name:"Artists by Name",index:"index:Artists by Name"},{name:"Albums by Name",index:"index:Albums by Name"},{name:"Albums by Artist",index:"index:Albums by Artist"},{name:"Tracks by Name",index:"index:Tracks by Name"}],getBrowseSources:[{albumart:"/albumart?sourceicon=music_service/mpd/favouritesicon.png",name:"Favorites",uri:"favourites",plugin_type:"",plugin_name:""},{albumart:"/albumart?sourceicon=music_service/mpd/playlisticon.svg",name:"Playlists",uri:"playlists",plugin_type:"music_service",plugin_name:"mpd"},{albumart:"/albumart?sourceicon=music_service/mpd/musiclibraryicon.svg",name:"Music Library",uri:"music-library",plugin_type:"music_service",plugin_name:"mpd"},{albumart:"/albumart?sourceicon=music_service/mpd/artisticon.png",name:"Artists",uri:"artists://",plugin_type:"music_service",plugin_name:"mpd"},{albumart:"/albumart?sourceicon=music_service/mpd/albumicon.png",name:"Albums",uri:"albums://",plugin_type:"music_service",plugin_name:"mpd"},{albumart:"/albumart?sourceicon=music_service/mpd/genreicon.png",name:"Genres",uri:"genres://",plugin_type:"music_service",plugin_name:"mpd"},{albumart:"/albumart?sourceicon=music_service/last_100/icon.svg",name:"last 100",uri:"Last_100",plugin_type:"music_service",plugin_name:"last_100"},{albumart:"/albumart?sourceicon=music_service/webradio/icon.svg",icon:"fa fa-microphone",name:"Web Radio",uri:"radio",plugin_type:"music_service",plugin_name:"webradio"},{name:"Audio CD",uri:"cd",info:"CD ",plugin_type:"music_service",plugin_name:"cd_controller",menuItems:[{name:"link1",socketCall:{emit:"callMethod",payload:{endpoint:"music_service/cd_controller",method:"playCD",data:""}}},{name:"link2",socketCall:{emit:"callMethod",payload:{endpoint:"music_service/cd_controller",method:"getRipInfo",data:""}}},{name:"link3",socketCall:{emit:"callMethod",payload:{endpoint:"music_service/cd_controller",method:"eject",data:""}}}]}],getBrowseLibrary:{navigation:{lists:[{title:"Artists",icon:"fa fa-music",availableListViews:["grid","list"],items:[{service:"mpd",type:"song",title:"Led Zeppelin",icon:"fa fa-music",uri:"search://artist/Led Zeppelin"}]},{title:"Webradios",icon:"",availableListViews:["list"],items:[{service:"webradio",type:"webradio",title:"ledjam",artist:"",album:"",icon:"fa fa-microphone",uri:"http://yp.shoutcast.com/sbin/tunein-station.m3u?id=492072"},{service:"webradio",type:"webradio",title:"NAXI 80-e RADIO (NAXI,Belgrade,Serbia, NAXI,Beograd,Srbija) - 128k",artist:"",album:"",icon:"fa fa-microphone",uri:"http://yp.shoutcast.com/sbin/tunein-station.m3u?id=68544"}]}],prev:{uri:"/"}}},getMultiRoomDevices:{misc:{debug:!0},list:[{id:"device_1",host:"http://192.168.0.120:3000",model:"model Small",signal:"low",name:"Bedroom",state:{status:"play",volume:80,mute:!1,artist:"Franz ferdinand",track:"No you Girls"},child:[{id:"device_3",host:"http://192.168.0.18:3000",model:"xx",signal:"low",name:"Bedroom left"},{id:"device_4",host:"http://192.168.0.18:3000",model:"yy",signal:"low",name:"Bedroom right"},{id:"device_5",host:"http://192.168.0.18:3000",model:"zz",signal:"low",name:"Bedroom center"}]},{id:"device_2",host:"http://192.168.0.10:3000",model:"model Xlarge",signal:"high",name:"Living room",state:{status:"play",volume:80,mute:!1,artist:"Korn",track:"Adidas"}},{id:"device_6",host:"http://192.168.0.18:3000",model:"model Xlarge",signal:"high",name:"Garden",state:{status:"play",volume:80,mute:!1,artist:"Banks",track:"Warm water"}}]},getMenuItems:[{id:"home",name:"Home",state:"volumio.playback"},{id:"components",name:"Components",state:"volumio.components"},{id:"network",name:"Network",state:"volumio.plugin",params:{pluginName:"network"}},{id:"multi-room",name:"Multi Room",state:"volumio.multi-room"},{id:"modal",name:"Power off",params:{modalName:"modal-power-off"}},{id:"static-page",name:"Credits",pageName:"test-static-page"}],multiRoomDevices:[{name:"AxiomAir4",ip:"http://192.168.1.159:3000",isSelf:!0,state:{volume:0,track:"aa",artist:"bb",albumart:""}},{name:"AxiomAir6",ip:"http://192.168.1.129:3000",state:{volume:0,track:"aa",artist:"bb",albumart:""}},{name:"AxiomAir6",ip:"http://192.168.1.129:3000",state:{volume:0,track:"aa",artist:"bb",albumart:""}},{type:"GROUP",name:"Kitchen",server:{name:"AxiomAir",ip:"http://192.168.1.111:3000",state:{volume:50,track:"Group track",artist:"art",albumart:""}},clients:[{name:"Child 1",ip:"http://192.168.1.110:3000",state:{volume:0,track:"",artist:"",albumart:""}},{name:"Child 2",ip:"http://192.168.1.116:3000",state:{volume:0,track:"aa",artist:"bb",albumart:""}}]}],getSettings:{page:{label:"Settings",description:"If you mess up with this configuration, you can reset to default.",passwordProtection:{enabled:!0,message:"Insert password for"}},sections:[{id:"section_player_name",hidden:!1,element:"section",label:"Player name",plugin:"settings/playback_conf",onSave:{type:"plugin",endpoint:"music_services/spop",method:"saveSpopConf",askForConfirm:{title:"Confirm",message:"Do you want to save this values?"}},saveButton:{label:"salva",data:["playerName"],hidden:!1},content:[{id:"playerName",element:"input",type:"text",label:"Player Name",attributes:[{placeholder:"call me with a fancy name"}],value:"Volumio",hidden:!1,description:"This is a desc",doc:"This is a doc"}]},{id:"section_services_management",element:"section",label:"Services management",description:"Enable or disable certain Volumio functionalities",onSave:{type:"plugin",endpoint:"music_services/spop",method:"saveSpopConf"},saveButton:{label:"salva",data:["airplay","upnp","upnp_dlna_indexing","dlna_library"]},content:[{id:"airplay",element:"switch",label:"Airplay",description:"Apple airplay",value:!0},{id:"upnp",element:"switch",label:"UPNP Control",value:!0},{id:"upnp_dlna_indexing",element:"switch",label:"UPNP/DLNA Indexing",value:!0},{id:"dlna_library",element:"switch",label:"DLNA Library Server",value:!0}]},{id:"section_streaming_services",element:"section",label:"Streaming services",description:"Enable or disable Spotify Streaming services",onSave:{type:"plugin",endpoint:"music_services/spop",method:"saveSpopConf"},saveButton:{label:"salva",data:["spotify_service","spotify_username","spotify_password","prefer_high_quality"]},content:[{id:"spotify_service",element:"switch",label:"Spotify Service",value:!0},{id:"spotify_username",element:"input",attributes:[{placeholder:"Type your spotify username"},{maxlength:5}],label:"Username",value:"asd",description:"desc",doc:"Spot doc",visibleIf:{field:"spotify_service",value:!0}},{id:"spotify_password",element:"input",type:"password",label:"Password",value:"dusdhsudhsu",visibleIf:{field:"spotify_service",value:!0}},{id:"prefer_high_quality",element:"switch",label:"Prefer high quality music",value:"false",visibleIf:{field:"spotify_service",value:!0}}]},{id:"section_sound_quality",type:"section",label:"Sound quality tweaks",description:"These profiles??",onSave:{type:"plugin",endpoint:"music_services/spop",method:"saveSpopConf"},saveButton:{label:"salva",data:["kernel_profile"]},content:[{id:"kernel_profile",element:"select",label:"Kernel profile",value:{value:2,label:"Less Jitter"},options:[{value:1,label:"Default"},{value:2,label:"Less Jitter"},{value:3,label:"Jitter"},{value:4,label:"Focus"}]}]},{id:"section_updates",type:"section",label:"System updates",content:[{id:"update",element:"button",label:"System updates",description:"You can check?...",onClick:{type:"emit",data:"search-for-upgrade",message:"updateCheck",askForConfirm:{title:"Confirm",message:"are you sure?"}}}]},{id:"eq",type:"section",label:"Equalizer",onSave:{type:"plugin",endpoint:"music_services/eq",method:"saveEqValues"},saveButton:{label:"Save eq settings",data:["bandEqualizer","equalizerSelector"]},content:[{id:"eq_switch",element:"switch",label:"Test eq switch",value:!0},{id:"bandEqualizer",element:"equalizer",label:"Music EQ",description:"Desc",visibleIf:{field:"eq_switch",value:!0},config:{orientation:"vertical",bars:[{min:-100,max:100,step:20,value:20,tooltip:"always"},{min:0,max:50,step:20,value:25,tooltip:"hide"},{min:0,max:50,step:20,value:25,tooltip:"always"}]}},{id:"equalizerSelector",element:"equalizer",label:"Slider selector",description:"Desc",config:{orientation:"horizontal",bars:[{min:0,max:50,step:10,value:[10,20],range:!0,tooltip:"always"},{ticks:[1,2,3],ticksLabels:["Min","Medium","Max"],value:2,tooltip:"show"},{ticks:[1,2,3,4,5],ticksPositions:[0,20,40,80,100],ticksLabels:["1","2","3","4","5"],tickSnapBounds:20,value:4,tooltip:"show"}]}}]}]}}}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i0?e.providerData[0].providerId||"":"";if((this.isProviderASocial(i)||this.isProviderASocial(a))&&(t.photoURL=e.photoUrl||null,e.displayName)){var n=e.displayName.split(" ");n.length>1&&(t.firstName=n[0],n.shift(),t.lastName=n.join().replace(","," "))}}},{key:"setUser",value:function(e){this.dbUser=e}},{key:"getUser",value:function(){return this.dbUser}},{key:"getRemoteAuthUser",value:function(){return this.authService.$getAuth()}},{key:"getRemoteDbUser",value:function(e){var t=this.$q.defer(),i=this.database.ref(this.USERS_REF).child(e),a=this.$firebaseObject(i);return a.$loaded().then(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}},{key:"isLogged",value:function(){return null!==this.dbUser}},{key:"login",value:function(e,t){var i=this,a=this.$q.defer();return this.authService.$signInWithEmailAndPassword(e,t).then(function(e){i.setUserByAuth(e).then(function(e){a.resolve(e)})})["catch"](function(e){i.error=e,a.reject(e)}),a.promise}},{key:"loginWithProvider",value:function(e){this.$q.defer();return this.authService.$signInWithRedirect(e).then(function(){})}},{key:"loginWithToken",value:function(e){return this.authService.$signInWithCustomToken(e)}},{key:"logOut",value:function(){this.setUserByAuth(null);var e=this.authService.$signOut();return e}},{key:"signup",value:function(e){var t=this,i=this.$q.defer();return this.createAuthUser(e).then(function(a){t.createDbUser(a.uid,e).then(function(e){t.authUser=a,t.dbUser=e,t.sendEmailVerification(),i.resolve(e)},function(e){a["delete"](),i.reject(e)})},function(e){i.reject(e)}),i.promise}},{key:"createAuthUser",value:function(e){var t=this.$q.defer();return this.authService.$createUserWithEmailAndPassword(e.email,e.password).then(function(e){t.resolve(e)})["catch"](function(e){t.reject(e)}),t.promise}},{key:"createDbUser",value:function(e,t){var i=this,a=this.$q.defer(),n=this.database.ref(this.USERS_REF).child(e);return t.uid=e,t.createdAt=this.firebase.database.ServerValue.TIMESTAMP,t.updatedAt=this.firebase.database.ServerValue.TIMESTAMP,delete t.password,n.set(t).then(function(e){i.getRemoteDbUser(n.key).then(function(e){a.resolve(e)},function(e){a.reject(e)})},function(e){a.reject(e)}),a.promise}},{key:"checkSendVerificationEmail",value:function(){var e=this;this.isLoggedAndVerified().then(function(t){t||e.sendEmailVerification()})}},{key:"sendEmailVerification",value:function(){{var e=this;document.location.origin}this.authUser.sendEmailVerification().then(function(){})["catch"](function(t){e.modalService.openDefaultErrorModal(t)})}},{key:"isLoggedAndVerified",value:function(){return this.authService.$requireSignIn(!0)}},{key:"updatePassword",value:function(e){var t=this.$q.defer();return this.authService.$updatePassword(e).then(function(){t.resolve()})["catch"](function(e){t.reject(e)}),t.promise}},{key:"updateEmail",value:function(e){var t=this.$q.defer();return this.authService.$updateEmail(e).then(function(){t.resolve()})["catch"](function(e){t.reject(e)}),t.promise}},{key:"recoverPassword",value:function(e){return this.authService.$sendPasswordResetEmail(e)}},{key:"deleteAuthUser",value:function(){return this.authUser["delete"]()}},{key:"getToken",value:function(){return this.firebase.auth().currentUser.getToken(!1)}},{key:"push",value:function(e,t){var i=this.$q.defer(),a=this.database.ref(e),n=this.$firebaseArray(a);return n.$add(t).then(function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise}},{key:"write",value:function(e,t){var i=this.$q.defer(),e=this.database.ref(e);return this.stripFirebaseAttributes(t),e.set(t).then(function(e){i.resolve()},function(e){i.reject(e)}),i.promise}},{key:"saveObject",value:function(e){var t=this.$q.defer();return e.$save().then(function(e){t.resolve()},function(e){t.reject(e)}),t.promise}},{key:"stripFirebaseAttributes",value:function(e){for(var t in e)0===t.indexOf("$")&&delete e[t],e.listeners&&delete e.listeners}},{key:"get",value:function(e){var t=this.$q.defer(),e=this.database.ref(e),i=this.$firebaseObject(e);return i.$loaded(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}},{key:"getInfByKey",value:function(e,t){var i=this.$q.defer();return this.firebase.database().ref(e).orderByKey().endAt(t).limitToLast(1).once("value").then(function(e){i.resolve(e.val())},function(e){i.reject(e)}),i.promise}},{key:"getArray",value:function(e){var t=this.$q.defer(),e=this.database.ref(e),i=this.$firebaseArray(e);return i.$loaded(function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}},{key:"waitForValue",value:function(e){var t=this,i=void 0===arguments[1]?60:arguments[1],a=this.$q.defer(),n=this.database.ref(e),r=this.setWaitForValueTimeout(n,a,i);return n.on("value",function(e){if(e&&void 0!==e.val()&&null!==e.val()){var i=e.val();a.resolve(i),n.off(),t.clearWaitForValueTimeout(r)}}),a.promise}},{key:"setWaitForValueTimeout",value:function(e,t,i){var a=this;return this.$timeout(function(){e.off(),t.reject(a.filteredTranslate("MYVOLUMIO.ERROR_SERVER_TIMEOUT"))},1e3*i)}},{key:"clearWaitForValueTimeout",value:function(e){e&&this.$timeout.cancel(e)}},{key:"deleteFromDb",value:function(e){var t=this.database.ref(e),i=this.$firebaseObject(t);return i.$remove()}},{key:"isProviderASocial",value:function(e){return this.contains(e,"google")||this.contains(e,"facebook")||this.contains(e,"github")?!0:!1}},{key:"contains",value:function(e,t){return null===e||void 0===e?!1:-1!==e.indexOf(t)}},{key:"uploadFile",value:function(e,t){var i=this.$q.defer(),a=this.firebase.storage().ref(e),n=this.$firebaseStorage(a),r=n.$put(t);return r.$complete(function(e){i.resolve(e.downloadURL)}),r.$error(function(e){i.reject(e)}),i.promise}},{key:"getDownloadUrl",value:function(e){var t=this.$q.defer(),i=this.firebase.storage().ref(e),a=this.$firebaseStorage(i);return a.$getDownloadURL().then(function(e){t.resolve(e)})["catch"](function(e){t.reject(e)}),t.promise}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i',document.head.appendChild(t)}},{key:"initializeGA",value:function(){var e=this;this.$log.debug("Starting GA");var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-EMK40SCD1G",document.head.appendChild(t);var i=document.createElement("script");i.innerHTML+="window.dataLayer = window.dataLayer || [];",i.innerHTML+="function gtag(){dataLayer.push(arguments);}",i.innerHTML+='gtag("js", new Date());',i.innerHTML+='gtag("config", "G-EMK40SCD1G", { "anonymize_ip": true });',document.head.appendChild(i),setTimeout(function(){e.saveGACid()},3e3)}},{key:"initializePushUtil",value:function(){this.$log.debug("Starting Push Util");var e=document.createElement("script");e.async=!0,e.src="https://pushupdates.volumio.org/static/pushupdatesutil.js?env=production",document.head.appendChild(e)}},{key:"initStats",value:function(){}},{key:"pushPrivacySettings",value:function(e){this.$log.debug("pushPrivacySettings",e),this.privacySettings=e,this.privacySettings.allowUIStatistics&&this.initStatistics()}},{key:"signalLead",value:function(){this.gaInit&&(this.$log.debug("Signalling lead"),this.$window.gtag("event","registration",{event_category:"lead",event_label:"myvolumio"}))}},{key:"signalSubscriptionCreated",value:function(e,t,i,a){if(e&&e.name&&t){var n=e.name.toLowerCase(),r=n+"_"+t,o=this.user.uid+Date.now(),s="EUR";if(a&&a.checkout&&a.checkout.recurring_prices&&a.checkout.recurring_prices.customer&&a.checkout.recurring_prices.customer.currency&&(s=a.checkout.recurring_prices.customer.currency),a&&a.user&&a.user.country&&this.saveUserCountry(a.user.country),this.gaInit){this.$log.debug("Signalling subscription created on GA");var l="trial";i||(l="resubscription");var c={value:0,currency:s,transaction_id:o,items:[{id:r,name:n,price:0,quantity:1}]};this.$window.gtag("event",l,{event_category:"plan",event_label:r}),this.$window.gtag("event","purchase",c)}if(this.fbInit){this.$log.debug("Signalling subscription created on FB");var u={value:0,currency:s,transaction_id:o,contents:[{id:r,name:n,price:0,quantity:1}]};this.$window.fbq("track","Purchase",u)}}}},{key:"signalSubscriptionCancelled",value:function(e){if(this.gaInit){this.$log.debug("Signalling subscription cancelled");var t=e&&e.plan?e.plan.toLowerCase():"free",i=e&&e.planDuration?e.planDuration.toLowerCase():"monthly",a=t+"_"+i;this.$window.gtag("event","cancellation",{event_category:"plan",event_label:a})}}},{key:"saveGACid",value:function(){var e=this;this.$window.gtag("get","G-EMK40SCD1G","client_id",function(t){e.user&&e.user.uid&&!e.user.gaCid&&t&&e.databaseService.write("users/"+e.user.uid+"/gaCid",t)})}},{key:"saveUserCountry",value:function(e){e&&2===e.length&&!this.user.country&&this.databaseService.write("users/"+this.user.uid+"/country",e)}},{key:"syncUser",value:function(e){this.user=e,this.user&&this.user.uid&&!this.user.gaCid&&this.gaInit&&this.saveGACid()}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i',scope:{},controller:r,controllerAs:"knob",require:"ngModel",bindToController:{value:"=",options:"=",type:"@",onChange:"&?",onRelease:"&?"}};return t};n.$inject=["$log"];var r=function(){function e(t,a,n){"ngInject";var r=this;i(this,e),this.timeoutHandler=null,this.timeoutHandler2=null,this.timeoutHandler3=null,this.$timeoutService=n,this.$element=a,this.lastValueUpdateTime=0;var o={change:function(e){n.cancel(r.timeoutHandler),r.timeoutHandler=n(function(){e=parseInt(e,10),r.value!==e&&(r.setNowAsLastValueUpdateTime(),r.value=e),r.onChange&&r.onChange({value:e})},0,!1)},release:function(e,t){n.cancel(r.timeoutHandler2),r.isChanging=!0,r.timeoutHandler2=n(function(){"volume"===r.type&&(e=parseInt(e,10),r.value!==e&&(r.setNowAsLastValueUpdateTime(),r.value=e)),r.onRelease&&r.onRelease({value:e}),r.isChanging=!1},0,!0)}};angular.extend(o,this.options),this.$element.knob(o),t.$watch(function(){return r.value},function(e,t){r.isCanvasUpdateNeeded(e,t)&&r.updateCanvas()}),t.$watch(function(){return r.options},function(e){e&&a.trigger("configure",e)},!0)}return e.$inject=["$scope","$element","$timeout"],a(e,[{key:"isCanvasUpdateNeeded",value:function(e,t){return e===t&&this.getCanvasValue()===e||!this.isMinimumTimeForUpdateElapsed()?!1:!0}},{key:"isMinimumTimeForUpdateElapsed",value:function(){return Date.now()>this.lastValueUpdateTime+300?!0:!1}},{key:"setNowAsLastValueUpdateTime",value:function(){this.lastValueUpdateTime=Date.now()}},{key:"getCanvasValue",value:function(){return this.$element?this.$element.val():void 0}},{key:"updateCanvas",value:function(){this.$timeoutService.cancel(this.timeoutHandler3),this.timeoutHandler3=this.updateCanvasAsyncTask()}},{key:"updateCanvasAsyncTask",value:function(){var e=this;return this.$timeoutService(function(){e.isChanging?(e.$timeoutService.cancel(e.timeoutHandler3),e.timeoutHandler3=e.updateCanvasAsyncTask()):e.updateCanvasComponent()},800)}},{key:"updateCanvasComponent",value:function(){this.$element.val(parseInt(this.value,10)).trigger("change")}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i',controller:r,controllerAs:"airplayScrim"};return e},r=function(){function e(t,a,n,r,o,s){"ngInject";var l=this;i(this,e),this.socketService=n,this.$document=r[0],this.modalService=o,this.$state=s,this.$scope=a,this.init(),t.$on("socket:init",function(){l.init()}),t.$on("socket:reconnect",function(){l.initService()})}return e.$inject=["$rootScope","$scope","socketService","$document","modalService","$state"],a(e,[{key:"init",value:function(){this.registerListner(),this.initService()}},{key:"registerListner",value:function(){var e=this,t=this.$scope.$on("socket:pushState",function(t,i){i.disableUi?(e.$state.go("volumio.playback"),e.$document.querySelector("#airplayScrim").classList.add("showScrim")):e.$document.querySelector("#airplayScrim").classList.remove("showScrim")});this.$scope.$on("$destroy",function(){t()})}},{key:"openScrimModal",value:function(){this.modalService.openModal("ModalGotitController","app/components/modals/modal-gotit.html",{title:"Airplay",message:"All functionalities will be resumed upon Airplay stop"})}},{key:"initService",value:function(){}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i=a.bottom&&i.classList.add("top"),i.style.visibility="visible"},10)};n(),a.addEventListener("click",n)}};return e};t["default"]=a,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i-1&&(e.premiumEnabled=!0)})},!0)}},{key:"isAuthActive",value:function(){return this.isPluginActiveById("my-volumio")}},{key:"isPluginActiveById",value:function(e){for(var t in this.menuItems){var i=this.menuItems[t];if(i.hasOwnProperty("id")&&i.id===e)return!0}return!1}},{key:"parseMenuItems",value:function(e){this.menuItems=e,this.menuItemsMainMenuLinks=e.filter(this.isMenuLink)}},{key:"isMenuLink",value:function(e){return"link"===e.id||"iframe-page"===e.id||"plugin-manager"===e.id||"shutdown"===e.id?!0:!1}},{key:"menuItemsMainMenuLinksClick",value:function(e){if(this.$log.debug(e),"modal"===e.id||"shutdown"===e.id){var t=e.params.modalName.split("-").map(function(e){return e[0].toUpperCase()+e.slice(1,e.length)}).join(""),i="app/components/side-menu/elements/"+e.params.modalName+".html";this.$log.debug(t),this.modalService.openModal(t+"Controller",i,e,e.params.modalSize||"lg")}else if("link"===e.id)this.$window.open(e.params.url);else if("iframe-page"===e.id)this.$state.go("volumio.iframe-page",{url:e.params.url});else if("static-page"===e.id)this.$state.go("volumio.static-page",{pageName:e.pageName});else if(e.state)if(this.$log.debug(e.state,e.params),e.params){for(var a in e.params)e.params[a]=String(e.params[a]).replace("/","-");this.$state.go(e.state,e.params)}else this.$state.go(e.state);else this.$state.go(e.state)}},{key:"menuItemsMyVolumioLinksClick",value:function(e){this.$state.go("myvolumio.premiumStreaming",{serviceName:e})}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function r(e){"ngInject";i(this,r);var t={restrict:"E",templateUrl:e.getHtmlPath("on-cloud-actions","components/on-cloud-actions"),scope:!1,controller:n,controllerAs:"OnCloudActions",bindToController:!0};return t};a.$inject=["themeManager"];var n=function o(){"ngInject";i(this,o)};t["default"]=a,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;in?"0"+n:n);return r}},{key:"seekPercent",set:function(e){this.inited&&(this.playerService.seekPercent=e,this.setSeek(this.playerService.seekPercent))},get:function(){return this.playerService.seekPercent}}]),e}();e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i=i?void t.modalService.openDefaultConfirm("MYVOLUMIO.MAX_DEVICES_ALERT_TITLE","MYVOLUMIO.MAX_DEVICES_ALERT_DESCRIPTION",function(){t.doEnableDevice(e)},function(){e.enabled=!1}):void t.doEnableDevice(e)},function(){e.enabled=!1})}},{key:"doEnableDevice",value:function(e){this.sanitizeAngularfireObject(e);this.doEnableDeviceApiCall(e)}},{key:"getCurrentActiveDevices",value:function(){var e=0;for(var t in this.devices)this.devices[t].enabled===!0&&e++;return e}},{key:"disableDevice",value:function(e){var t=this;this.modalService.openDefaultConfirm(null,"MYVOLUMIO.DEVICE_CONFIRM_DISABLE",function(){t.doDisableDeviceApiCall(e)},function(){e.enabled=!0})}},{key:"doDisableDeviceApiCall",value:function(e){return this.firebaseApiFunctionsService.doDisableDeviceApiCall(e,this.user.uid)}},{key:"doEnableDeviceApiCall",value:function(e){return this.firebaseApiFunctionsService.doEnableDeviceApiCall(e,this.user.uid)}},{key:"deleteDevice",value:function(e){var t=this;this.modalService.openDefaultConfirm(null,"MYVOLUMIO.DEVICE_CONFIRM_DELETE",function(){return t.firebaseApiFunctionsService.deleteDevice(e,t.user.uid)})}},{key:"sanitizeAngularfireObject",value:function(e){var t={};for(var i in e)0!==i.indexOf("$")&&(t[i]=e[i]);return t}},{key:"toggleAbilitation",value:function(e){e.enabled?this.disableDevice(e):this.enableDevice(e)}},{key:"toggleAbilitationAfterChange",value:function(e){e.enabled?this.enableDevice(e):this.disableDevice(e)}},{key:"gotoDevice",value:function(e){var t=this;this.socketService.host=e.host,this.saveLastDevice(e).then(function(){t.$state.go("volumio.playback")})["catch"](function(){t.$state.go("volumio.playback")})}},{key:"saveLastDevice",value:function(e){var t=this;return this.authService.getUser().then(function(i){return t.databaseService.write("users/"+i.uid+"/lastHost",e.host)})["catch"](function(e){return e})}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i"+t,i)}),this.socketService.emit("get"+this.apiMethod)}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function n(e,t,a,r){"ngInject";var o=this;i(this,n),e.get("app/themes/"+r.theme+"/assets/static-pages/"+a.pageName+".html").then(function(e){o.content=e.data},function(e){t.error(e)})};a.$inject=["$http","$log","$stateParams","themeManager"],t["default"]=a,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i\n \n \n \n \n ';a=this.$compile(a)(this.$scope);var n=angular.element(e).parent();n.replaceWith(a),this.$timeout(function(){document.querySelector("#hamburgerMenuBtn-"+t+"-"+i).click()},0)}},{key:"addToPlaylist",value:function(e){this.playlistService.refreshPlaylists();var t="app/browse/components/modal/modal-playlist.html",i="ModalPlaylistController",a={title:"Add to playlist",item:e};this.modalService.openModal(i,t,a,"sm")}},{key:"addWebRadio",value:function(e){var t="app/browse/components/modal/modal-web-radio.html",i="ModalWebRadioController",a={title:"Add web radio",item:e};this.modalService.openModal(i,t,a,"sm")}},{key:"editWebRadio",value:function(e){this.addWebRadio(e)}},{key:"safeRemoveDrive",value:function(e){this.socketService.emit("safeRemoveDrive",e)}},{key:"updateFolder",value:function(e){this.socketService.emit("updateDb",e)}},{key:"deleteFolder",value:function(e,t){this.socketService.emit("deleteFolder",{curUri:e,item:t})}},{key:"search",value:function(){var e=this;this.searchField&&this.searchField.length>=2?(this.browseService.isSearching=!0,this.searchTimeoutHandler&&this.$timeout.cancel(this.searchTimeoutHandler),this.searchTimeoutHandler=this.$timeout(function(){var t={};t=e.isDedicatedSearchView?{type:e.browseService.filterBy,value:e.searchField}:{type:e.browseService.filterBy,value:e.searchField,plugin_name:e.browseService.currentFetchRequest.plugin_name,plugin_type:e.browseService.currentFetchRequest.plugin_type,uri:e.browseService.currentFetchRequest.uri,service:e.browseService.currentFetchRequest.service},e.$log.debug("search",t),e.socketService.emit("search",t)},600,!1)):(this.browseService.isSearching=!1,this.browseService.lists=[])}},{key:"searchSubmit",value:function(e){e.preventDefault(),this.$document[0].activeElement.blur()}},{key:"showHamburgerMenu",value:function(e){var t="radio-favourites"===e.type||"radio-category"===e.type;return!t}},{key:"showPlayButton",value:function(e){var t="folder"===e.type||"song"===e.type||"mywebradio"===e.type||"webradio"===e.type||"playlist"===e.type||"cuesong"===e.type||"remdisk"===e.type||"cuefile"===e.type||"folder-with-favourites"===e.type||"internal-folder"===e.type;return t}},{key:"showAddToQueueButton",value:function(e){var t="folder"===e.type||"song"===e.type||"mywebradio"===e.type||"webradio"===e.type||"playlist"===e.type||"remdisk"===e.type||"cuefile"===e.type||"folder-with-favourites"===e.type||"internal-folder"===e.type;return t}},{key:"showAddToPlaylist",value:function(e){var t="folder"===e.type||"song"===e.type||"remdisk"===e.type||"folder-with-favourites"===e.type||"internal-folder"===e.type;return t}},{key:"browseServiceHamburgerClick",value:function(e){this.$log.debug("browseServiceHamburgerClick",e),this.socketService.emit(e.emit,e.payload)}},{key:"renderBrowseTable",value:function(){var e=this;return this.browseService.lists?void this.$timeout(function(){{var t="angular.element('#browseTablesWrapper').scope().browse";e.browseService.info}e.table="",e.browseService.info&&(e.table+='
',e.table+='
',!e.browseService.info.icon&&e.browseService.info.albumart&&(e.table+='\n '),e.browseService.info.icon&&(e.table+=''),e.table+="
",e.table+='\n
\n
\n \n
\n
',e.table+=e.browseService.info.title?'
\n
\n '+(e.browseService.info.title?e.browseService.info.title:"")+"\n
\n
":'\n
\n
\n '+(e.browseService.info.album?e.browseService.info.album:"")+'\n
\n
\n '+(e.browseService.info.artist?e.browseService.info.artist:"")+'\n
\n
\n '+(e.browseService.info.duration?e.browseService.info.duration:"")+" "+(e.browseService.info.year?"- "+e.browseService.info.year:"")+"\n
\n
",e.table+="
"),e.browseService.lists.forEach(function(i,a){i.title&&(e.table+='\n
\n '+i.title+"\n
"),e.table+='
',i.items.forEach(function(i,n){e.table+='
',(i.icon||i.albumart)&&(e.table+='
',!i.icon&&i.albumart&&(e.table+='\n '),i.icon&&(e.table+=''),e.table+="
"),e.table+='\n
\n
\n \n
\n
',e.table+='\n
',e.table+=i.tagImage?'\n
\n '+(i.title?i.title:"")+"\n
":'
\n '+(i.title?i.title:"")+"\n
",e.table+='
\n '+(i.artist?i.artist:"")+" "+(i.album?"- "+i.album:"")+"\n
\n
",e.table+="
"}),e.table+="
"}),e.table+='
',e.$timeout(function(){var t=document.querySelector(".browseTable");t.style.display="none",t.innerHTML=e.table,t.style.display="block",e.applyGridStyle(),e.$rootScope.$broadcast("browseController:listRendered")},50,!1)},0):!1}},{key:"applyGridStyle",value:function(){var e=this,t=document.querySelectorAll(".listWrapper");this.browseService.lists.forEach(function(i,a){e.browseService.canShowGridView(i)?t[a].classList.add("grid"):t[a].classList.remove("grid")})}},{key:"toggleGridView",value:function(){this.browseService.toggleGridView(),this.applyGridStyle()}},{key:"initController",value:function(){var e=this,t=this.backListener.bind(this);this.$document[0].addEventListener("keydown",t,!1),this.$scope.$on("$destroy",function(){e.$document[0].removeEventListener("keydown",t,!1)}),this.$scope.$watch(function(){return e.$stateParams.isDedicatedSearch},function(t){t?e.setDedicatedSearch():e.unsetDedicatedSearch()},!0)}},{key:"setDedicatedSearch",value:function(){this.isDedicatedSearchView=!0,this.browseService.isSearching=!0,this.browseService.lists=[],this.$timeout(function(){document.querySelector("#search-input-form").focus()},100)}},{key:"unsetDedicatedSearch",value:function(){this.browseService.isSearching&&(this.isDedicatedSearchView=!1,this.browseService.isSearching=!1,this.browseService.isBrowsing?this.browseService.lastBrowseLists&&(this.browseService.lists=this.browseService.lastBrowseLists):this.browseService.lists=void 0)}},{key:"backListener",value:function(){var e=void 0;if(8===event.keyCode){var t=event.srcElement||event.target;e="INPUT"===t.tagName.toUpperCase()&&("TEXT"===t.type.toUpperCase()||"PASSWORD"===t.type.toUpperCase()||"FILE"===t.type.toUpperCase()||"SEARCH"===t.type.toUpperCase()||"EMAIL"===t.type.toUpperCase()||"NUMBER"===t.type.toUpperCase()||"DATE"===t.type.toUpperCase())||"TEXTAREA"===t.tagName.toUpperCase()?t.readOnly||t.disabled:!0}e&&(event.preventDefault(),this.browseService.breadcrumbs&&this.fetchLibrary({uri:this.browseService.breadcrumbs.uri},!0))}},{key:"isVolumio3Theme",value:function(){return"volumio3"===this.themeManager.theme}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i=2?(this.browseService.isSearching=!0,this.searchTimeoutHandler&&this.$timeout.cancel(this.searchTimeoutHandler),this.searchTimeoutHandler=this.$timeout(function(){var t={};t=e.isDedicatedSearchView?{type:e.browseService.filterBy,value:e.searchField}:{type:e.browseService.filterBy,value:e.searchField,plugin_name:e.browseService.currentFetchRequest.plugin_name,plugin_type:e.browseService.currentFetchRequest.plugin_type,uri:e.browseService.currentFetchRequest.uri,service:e.browseService.currentFetchRequest.service},e.$log.debug("search",t),e.socketService.emit("search",t)},600,!1)):(this.browseService.isSearching=!1,this.browseService.lists=[])}},{key:"searchSubmit",value:function(e){e.preventDefault(),this.$document[0].activeElement.blur()}},{key:"showHamburgerMenu",value:function(e){var t="radio-favourites"===e.type||"radio-category"===e.type||"spotify-category"===e.type;return!t}},{key:"showPlayButton",value:function(e){if(!e)return!1;if("folder"===e.type&&e.uri&&e.uri.startsWith("music-library/")&&e.uri.split("/").length<4||e.disablePlayButton===!0)return!1;var t="folder"===e.type||"song"===e.type||"mywebradio"===e.type||"webradio"===e.type||"playlist"===e.type||"cuesong"===e.type||"remdisk"===e.type||"cuefile"===e.type||"folder-with-favourites"===e.type||"internal-folder"===e.type;return t}},{key:"showAddToQueueButton",value:function(e){var t="folder"===e.type||"song"===e.type||"mywebradio"===e.type||"webradio"===e.type||"playlist"===e.type||"remdisk"===e.type||"cuefile"===e.type||"folder-with-favourites"===e.type||"internal-folder"===e.type;return t}},{key:"showAddToPlaylist",value:function(e){var t="folder"===e.type||"song"===e.type||"remdisk"===e.type||"folder-with-favourites"===e.type||"internal-folder"===e.type;return t}},{key:"showMoreStory",value:function(e){return this.authService.hasPremium()||this.authService.isPremiumDevice()?void(e&&this.showCreditsDetails(e)):void this.showPremiumFeatureModal()}},{key:"showCreditsDetails",value:function(e){var t="app/browse-music/components/modal/modal-credits-details.html",i="ModalCreditsDetailsController",a={title:e.title,story:e.story,credits:e.credits,upgradeCta:e.upgradeCta||!1};this.modalService.openModal(i,t,a,"md")}},{key:"checkAuthAndSubscription",value:function(){var e={authEnabled:!1,plan:null};return this.authService&&(e.authEnabled=this.authService.isEnabled,this.authService.user&&(e.plan=this.authService.user.plan)),e}},{key:"checkCreditsEnabledForPlan",value:function(){return this.checkAuthAndSubscription().authEnabled?"superstar"===this.checkAuthAndSubscription().plan||"premium"===this.checkAuthAndSubscription().plan?!0:!1:!0}},{key:"timeFormat",value:function(e){var t=~~(e/3600),i=~~(e%3600/60),a=~~e%60,n="";return t>0&&(n+=""+t+":"+(10>i?"0":"")),n+=""+i+":"+(10>a?"0":""),n+=""+a}},{key:"addToFavorites",value:function(e,t){e&&e.stopPropagation(),t&&this.playlistService.addToFavourites(t)}},{key:"addToFavoritesByIndex",value:function(e,t,i){e.stopPropagation();var a=this.browseService.lists[t].items[i];this.addToFavorites(null,a)}},{key:"fetchAdditionalMetas",value:function(){this.currentItemMetas={},this.browseService.info&&(this.browseService.info.type&&"artist"===this.browseService.info.type&&this.browseService.info.title?this.getArtistMetas(this.browseService.info):this.browseService.info.artist&&this.browseService.info.album&&(this.getAlbumMetas(this.browseService.info),this.getAlbumCredits(this.browseService.info)))}},{key:"getArtistMetas",value:function(e){var t={mode:"storyArtist",artist:e.title};return this.requestMetavolumioApi(t)}},{key:"getAlbumMetas",value:function(e){var t={mode:"storyAlbum",artist:e.artist,album:e.album};return this.requestMetavolumioApi(t)}},{key:"getArtistInfo",value:function(e){var t=this;if(!this.checkCreditsEnabledForPlan())return void this.showPremiumFeatureModal();if(!e.artist)return null;var i=this.socketService.host+"/api/v1/pluginEndpoint",a={endpoint:"metavolumio",data:{mode:"storyArtist",artist:e.artist}};this.currentItemMetas.artistStory?this.showCreditsDetails({title:this.browseService.info.artist,story:this.currentItemMetas.artistStory}):this.$http.post(i,a,this.creditRequestOptions).then(function(e){e.data&&e.data.success&&e.data.data&&e.data.data.value?(t.currentItemMetas.artistStory=e.data.data.value,t.showCreditsDetails({title:t.browseService.info.artist,story:t.currentItemMetas.artistStory})):t.showCreditsDetails({title:t.browseService.info.artist,story:"

"+t.filteredTranslate("BROWSER.ARTIST_STORY_NOT_FOUND_FOR")+" "+t.browseService.info.artist+".

"})})}},{key:"showPremiumFeatureModal",value:function(){this.showCreditsDetails({title:this.filteredTranslate("MYVOLUMIO.MODAL_DISCOVERY_PREMIUM_TITLE"),story:'\n

'+this.filteredTranslate("MYVOLUMIO.MODAL_DISCOVERY_PREMIUM_HEADING")+'

\n

'+this.filteredTranslate("MYVOLUMIO.MODAL_DISCOVERY_PREMIUM_TEXT")+"

\n ",upgradeCta:!0})}},{key:"getAlbumCredits",value:function(e){var t=this;if(this.currentItemMetas.albumCredits="",e&&e.artist&&e.album){var i=this.socketService.host+"/api/v1/pluginEndpoint",a={endpoint:"metavolumio",data:{mode:"creditsAlbum",artist:e.artist,album:e.album}};return this.$http.post(i,a,this.creditRequestOptions).then(function(e){e.data&&e.data.success&&e.data.data&&e.data.data.value&&(t.currentItemMetas.albumCredits=e.data.data.value)})}}},{key:"requestMetavolumioApi",value:function(e){var t=this,i=this.socketService.host+"/api/v1/pluginEndpoint",a={endpoint:"metavolumio",data:e};return this.$http.post(i,a,this.creditRequestOptions).then(function(e){e.data&&e.data.success&&e.data.data&&e.data.data.value&&(t.currentItemMetas.story=e.data.data.value)})}},{key:"showCreditLink",value:function(e,t){var i=this,a=this.socketService.host+"/api/v1/pluginEndpoint",n={endpoint:"metavolumio",data:{}};if(e.indexOf("mbid:/artist/")>-1)n.data.mbid=e.replace("mbid:/artist/",""),n.data.mode="storyArtist",this.loadingCredit[e]=!0;else if(e.indexOf("mbid:/label/")>-1)n.data.mbid=e.replace("mbid:/label/",""),n.data.mode="storyLabel",this.loadingCredit[e]=!0;else{if(!(e.indexOf("mbid:/place/")>-1))return;n.data.mbid=e.replace("mbid:/place/",""),n.data.mode="storyPlace",this.loadingCredit[e]=!0}return this.$http.post(a,n,this.creditRequestOptions).then(function(a){return a.data&&a.data.success&&a.data.data&&a.data.data.value?(i.loadingCredit[e]=!1,i.showCreditsDetails({title:t,story:a.data.data.value})):void 0})}},{key:"playMusicCardClick",value:function(e,t){e.stopPropagation(),this.play(t)}},{key:"playRenderedMusicCardClick", value:function(e,t){var i=this.browseService.lists[e].items[t];if(i&&"song"===i.type){var a=this.browseService.lists[e].items;this.playItemsList(i,a,t)}else this.playItemsList(i)}},{key:"play",value:function(e){return"playlists"!==this.browseService.currentFetchRequest.uri?this.playQueueService.playItemsList(e):void this.playQueueService.replaceAndPlay(e)}},{key:"addToQueue",value:function(e){"playlists"===this.browseService.currentFetchRequest.uri?this.playQueueService.enqueue(e):this.playQueueService.add(e)}},{key:"replaceAndPlay",value:function(e){"cuesong"===e.type?this.playQueueService.replaceAndPlayCue(e):this.playQueueService.replaceAndPlay(e)}},{key:"addToPlaylist",value:function(e){this.playlistService.refreshPlaylists();var t="app/browse/components/modal/modal-playlist.html",i="ModalPlaylistController",a={title:"Add to playlist",item:e};this.modalService.openModal(i,t,a,"sm")}},{key:"showAlbumCredits",value:function(){if(!this.checkCreditsEnabledForPlan())return void this.showPremiumFeatureModal();var e={title:this.browseService.info.album,credits:this.currentItemMetas.albumCredits};this.showCreditsDetails(e)}},{key:"playAlbumItemClick",value:function(e,t,i){return this.playQueueService.playItemsList(e,t,i)}},{key:"preventBubbling",value:function(e){e.stopPropagation(),e.preventDefault()}},{key:"clickListItem",value:function(e,t,i){"song"!==e.type&&"webradio"!==e.type&&"mywebradio"!==e.type&&"cuesong"!==e.type&&"album"!==e.type&&"artist"!==e.type&&"cd"!==e.type&&"play-playlist"!==e.type?this.fetchLibrary(e):"webradio"===e.type||"mywebradio"===e.type||"album"===e.type||"artist"===e.type?this.play(e,t,i):"song"===e.type?this.playItemsList(e,t,i):"cuesong"===e.type?this.playQueueService.addPlayCue(e):"cd"===e.type?this.playQueueService.replaceAndPlay(e):"play-playlist"===e.type&&this.playQueueService.playPlaylist({title:e.name})}},{key:"clickListItemByIndex",value:function(e,t){var i=this.browseService.lists[e].items[t],a=this.browseService.lists[e].items;this.clickListItem(i,a,t)}},{key:"playItemsList",value:function(e,t,i){return this.playQueueService.playItemsList(e,t,i)}},{key:"addAndPlayList",value:function(e,t,i){return this.playQueueService.addAndPlayList(e,t,i)}},{key:"openMusicCardContenxtList",value:function(e,t,i){e.stopPropagation();var a='\n \n \n \n \n ';a=this.$compile(a)(this.$scope);var n=document.getElementById("hamburgerMenuBtn-"+t+"-"+i);n&&n.replaceWith(a[0]),this.$timeout(function(){document.querySelector("#hamburgerMenuBtn-"+t+"-"+i).click()},0)}},{key:"clickMusicCard",value:function(e){"song"===e.type?this.play(e):this.fetchLibrary(e)}},{key:"resetBrowsePage",value:function(){var e=document.getElementById("browse-page");e.innerHTML=""}},{key:"renderBrowsePage",value:function(e){var t=this,i=e.map(function(e,i){return t.renderList(e,i)}),a=document.getElementById("browse-page");a.style.display="none",a.innerHTML=i.join(""),this.$timeout(function(){t.$rootScope.$broadcast("browseController:listRendered"),a.style.display="block"},0,!1)}},{key:"renderList",value:function(e,t){var i=this.browseService.canShowGridView(e),a=this.browseService.showGridView,n="";n=a&&i?this.renderMusicCardItems(e.items,t):this.renderListItems(e.items,t);var r='\n \n

'+(e.title||"")+'

\n
\n '+n+"\n "+(0===n.length?'

No items

':"")+"\n
\n \n ";return r}},{key:"renderMusicCardItems",value:function(e,t){var i=this,a="angular.element('#browse-page').scope().browse",n=e.map(function(e,n){return'\n
\n
\n
\n \n \n \n
\n \n
'+(e.genre||"")+'
\n \n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n '+(e.title||"")+'\n
\n\n \n \n

'+(e.meta||e.artist||"")+"

\n \n \n "}),r=n.join("");return r+='\n
\n
\n
\n
\n
\n
\n '}},{key:"renderListItems",value:function(e,t){var i=this,a="angular.element('#browse-page').scope().browse";if(this.uiSettingsService.isMemorySavingTouchUiEnabled()){var n=e.map(function(e,n){var r='\n
\n
\n \n
\n\n
\n
\n '+(e.title||"")+' \n
';return e.album&&(r+='\n
\n '+(e.album||"")+"\n
"),e.album&&e.artist&&(r+='\n
\n •\n
'),e.artist&&(r+='\n
\n '+(e.artist||"")+"\n
\n "),r+='\n
\n \n \n \n \n
\n\n \n '+i.timeFormat(e.duration)+'\n \n\n \n \n \n \n \n \n \n '});return n.join("")}var r=e.map(function(e,n){var r='\n
\n
\n \n \n \n \n
\n\n
\n
'+e.tracknumber+'.
\n
\n \n
\n \n \n
\n
\n
\n
\n '+(e.title||"")+' \n
';return e.album&&(r+='\n
\n '+(e.album||"")+"\n
"),e.album&&e.artist&&(r+='\n
\n •\n
'),e.artist&&(r+='\n
\n '+(e.artist||"")+"\n
\n "),r+='\n
\n \n \n \n \n \n\n \n '+i.timeFormat(e.duration)+'\n \n\n \n \n \n \n \n \n \n '});return r.join("")}},{key:"toggleGridView",value:function(){this.browseService.toggleGridView(),this.renderBrowsePage(this.browseService.lists)}},{key:"isVolumio3Theme",value:function(){return"volumio3"===this.themeManager.theme}},{key:"fetchTrackTypeImage",value:function(){this.browseService.info&&this.browseService.info.trackType&&(this.browseService.info.fileFormat="",this.browseService.info.fileFormat=this.loadFileFormatIcon(this.browseService.info.trackType))}},{key:"loadFileFormatIcon",value:function(e){return this.playerService.loadFileFormatIcon(e)}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;ii;i++){var n=this.playQueueService.queue[i];this.list+='\n
  • \n
    \n ',this.list+=n.icon?'':''+n.title+'',this.list+="
    ",this.list+='
    \n
    \n '+n.name+"\n
    ",(n.artist||n.album)&&(this.list+='
    \n '+n.artist+(n.album?" - "+n.album:"")+"\n
    "),this.list+="
    ",this.list+='
    \n \n \n \n
    \n
  • '}var r=document.createElement("ul");angular.element(r).append(this.list),angular.element("#playQueueList ul").replaceWith(r);var o=document.querySelector("#playQueueList ul");if(this.hilightCurrentTrack(!0),o){Sortable.create(o,{onEnd:function(t){var i={from:t.oldIndex,to:t.newIndex},a=e.$document[0].getElementById("itemQueue-"+t.oldIndex);a.classList.remove("sorting"),e.socketService.emit("moveQueue",i)},onStart:function(t){var i=e.$document[0].getElementById("itemQueue-"+t.oldIndex);i.classList.add("sorting")},animation:250,delay:150})}}},{key:"hilightCurrentTrack",value:function(){var e=void 0===arguments[0]?!1:arguments[0];if(!this.playerService.state)return!1;var t=this.playerService.state.position,i=this.$document[0].querySelector(".isPlaying");i&&i.classList.remove("isPlaying");var a=this.$document[0].getElementById("itemQueue-"+t);a&&"play"===this.playerService.state.status&&(a.classList.add("isPlaying"),e&&a.scrollIntoView())}},{key:"init",value:function(){this.registerListner()}},{key:"registerListner",value:function(){var e=this,t=this.$scope.$on("socket:pushState",function(){e.hilightCurrentTrack()});this.$scope.$on("$destroy",function(){t()})}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i0,0===this.sleepPreset.val&&(this.sleepPreset=null)}},{key:"timeChanged",value:function(){for(var e=60*this.sleepTime.getHours()+this.sleepTime.getMinutes(),t=0;t'+this.filteredTranslate("MYVOLUMIO.MODAL_DISCOVERY_PREMIUM_HEADING")+'\n

    '+this.filteredTranslate("MYVOLUMIO.MODAL_DISCOVERY_PREMIUM_TEXT")+"

    \n ",upgradeCta:!0})}},{key:"checkAuthAndSubscription",value:function(){var e={authEnabled:!1,plan:null};return this.authService&&(e.authEnabled=this.authService.isEnabled,this.authService.user&&(e.plan=this.authService.user.plan)),e}},{key:"checkIfCreditsCanBeShown",value:function(){return this.authService&&this.authService.isEnabled?this.authService.user&&this.authService.user.plan&&("superstar"===this.authService.user.plan||"premium"===this.authService.user.plan)?!0:this.authService.isPremiumDevice()?!0:!1:!0}}]),e}());t["default"]=r,e.exports=t["default"]},function(e,t,i){var a;(function(e,n){(function(){function r(e,t,i){switch(i.length){case 0:return e.call(t);case 1:return e.call(t,i[0]);case 2:return e.call(t,i[0],i[1]);case 3:return e.call(t,i[0],i[1],i[2])}return e.apply(t,i)}function o(e,t,i,a){for(var n=-1,r=null==e?0:e.length;++n-1}function h(e,t,i){for(var a=-1,n=null==e?0:e.length;++a-1;);return i}function x(e,t){for(var i=e.length;i--&&w(t,e[i],0)>-1;);return i}function N(e,t){for(var i=e.length,a=0;i--;)e[i]===t&&++a;return a}function j(e){return"\\"+ta[e]}function B(e,t){return null==e?ne:e[t]}function F(e){return Gi.test(e)}function W(e){return qi.test(e)}function Y(e){for(var t,i=[];!(t=e.next()).done;)i.push(t.value);return i}function z(e){var t=-1,i=Array(e.size);return e.forEach(function(e,a){i[++t]=[a,e]}),i}function G(e,t){return function(i){return e(t(i))}}function q(e,t){for(var i=-1,a=e.length,n=0,r=[];++i>>1,Fe=[["ary",Oe],["bind",be],["bindKey",ye],["curry",Se],["curryRight",we],["flip",Ie],["partial",_e],["partialRight",Me],["rearg",Ce]],We="[object Arguments]",Ye="[object Array]",ze="[object AsyncFunction]",Ge="[object Boolean]",qe="[object Date]",He="[object DOMException]",Ke="[object Error]",Qe="[object Function]",Je="[object GeneratorFunction]",Ze="[object Map]",Xe="[object Number]",et="[object Null]",tt="[object Object]",it="[object Promise]",at="[object Proxy]",nt="[object RegExp]",rt="[object Set]",ot="[object String]",st="[object Symbol]",lt="[object Undefined]",ct="[object WeakMap]",ut="[object WeakSet]",dt="[object ArrayBuffer]",ht="[object DataView]",pt="[object Float32Array]",mt="[object Float64Array]",vt="[object Int8Array]",gt="[object Int16Array]",ft="[object Int32Array]",bt="[object Uint8Array]",yt="[object Uint8ClampedArray]",kt="[object Uint16Array]",St="[object Uint32Array]",wt=/\b__p \+= '';/g,_t=/\b(__p \+=) '' \+/g,Mt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Ot=/&(?:amp|lt|gt|quot|#39);/g,Ct=/[&<>"']/g,It=RegExp(Ot.source),Tt=RegExp(Ct.source),Pt=/<%-([\s\S]+?)%>/g,Et=/<%([\s\S]+?)%>/g,At=/<%=([\s\S]+?)%>/g,$t=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Lt=/^\w*$/,Vt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Dt=/[\\^$.*+?()[\]{}|]/g,Rt=RegExp(Dt.source),Ut=/^\s+/,xt=/\s/,Nt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,jt=/\{\n\/\* \[wrapped with (.+)\] \*/,Bt=/,? & /,Ft=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Wt=/[()=,{}\[\]\/\s]/,Yt=/\\(\\)?/g,zt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Gt=/\w*$/,qt=/^[-+]0x[0-9a-f]+$/i,Ht=/^0b[01]+$/i,Kt=/^\[object .+?Constructor\]$/,Qt=/^0o[0-7]+$/i,Jt=/^(?:0|[1-9]\d*)$/,Zt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Xt=/($^)/,ei=/['\n\r\u2028\u2029\\]/g,ti="\\ud800-\\udfff",ii="\\u0300-\\u036f",ai="\\ufe20-\\ufe2f",ni="\\u20d0-\\u20ff",ri=ii+ai+ni,oi="\\u2700-\\u27bf",si="a-z\\xdf-\\xf6\\xf8-\\xff",li="\\xac\\xb1\\xd7\\xf7",ci="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",ui="\\u2000-\\u206f",di=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",hi="A-Z\\xc0-\\xd6\\xd8-\\xde",pi="\\ufe0e\\ufe0f",mi=li+ci+ui+di,vi="['’]",gi="["+ti+"]",fi="["+mi+"]",bi="["+ri+"]",yi="\\d+",ki="["+oi+"]",Si="["+si+"]",wi="[^"+ti+mi+yi+oi+si+hi+"]",_i="\\ud83c[\\udffb-\\udfff]",Mi="(?:"+bi+"|"+_i+")",Oi="[^"+ti+"]",Ci="(?:\\ud83c[\\udde6-\\uddff]){2}",Ii="[\\ud800-\\udbff][\\udc00-\\udfff]",Ti="["+hi+"]",Pi="\\u200d",Ei="(?:"+Si+"|"+wi+")",Ai="(?:"+Ti+"|"+wi+")",$i="(?:"+vi+"(?:d|ll|m|re|s|t|ve))?",Li="(?:"+vi+"(?:D|LL|M|RE|S|T|VE))?",Vi=Mi+"?",Di="["+pi+"]?",Ri="(?:"+Pi+"(?:"+[Oi,Ci,Ii].join("|")+")"+Di+Vi+")*",Ui="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",xi="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ni=Di+Vi+Ri,ji="(?:"+[ki,Ci,Ii].join("|")+")"+Ni,Bi="(?:"+[Oi+bi+"?",bi,Ci,Ii,gi].join("|")+")",Fi=RegExp(vi,"g"),Wi=RegExp(bi,"g"),Yi=RegExp(_i+"(?="+_i+")|"+Bi+Ni,"g"),zi=RegExp([Ti+"?"+Si+"+"+$i+"(?="+[fi,Ti,"$"].join("|")+")",Ai+"+"+Li+"(?="+[fi,Ti+Ei,"$"].join("|")+")",Ti+"?"+Ei+"+"+$i,Ti+"+"+Li,xi,Ui,yi,ji].join("|"),"g"),Gi=RegExp("["+Pi+ti+ri+pi+"]"),qi=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Hi=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ki=-1,Qi={};Qi[pt]=Qi[mt]=Qi[vt]=Qi[gt]=Qi[ft]=Qi[bt]=Qi[yt]=Qi[kt]=Qi[St]=!0,Qi[We]=Qi[Ye]=Qi[dt]=Qi[Ge]=Qi[ht]=Qi[qe]=Qi[Ke]=Qi[Qe]=Qi[Ze]=Qi[Xe]=Qi[tt]=Qi[nt]=Qi[rt]=Qi[ot]=Qi[ct]=!1;var Ji={};Ji[We]=Ji[Ye]=Ji[dt]=Ji[ht]=Ji[Ge]=Ji[qe]=Ji[pt]=Ji[mt]=Ji[vt]=Ji[gt]=Ji[ft]=Ji[Ze]=Ji[Xe]=Ji[tt]=Ji[nt]=Ji[rt]=Ji[ot]=Ji[st]=Ji[bt]=Ji[yt]=Ji[kt]=Ji[St]=!0,Ji[Ke]=Ji[Qe]=Ji[ct]=!1;var Zi={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},Xi={"&":"&","<":"<",">":">",'"':""","'":"'"},ea={"&":"&","<":"<",">":">",""":'"',"'":"'"},ta={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ia=parseFloat,aa=parseInt,na="object"==typeof e&&e&&e.Object===Object&&e,ra="object"==typeof self&&self&&self.Object===Object&&self,oa=na||ra||Function("return this")(),sa="object"==typeof t&&t&&!t.nodeType&&t,la=sa&&"object"==typeof n&&n&&!n.nodeType&&n,ca=la&&la.exports===sa,ua=ca&&na.process,da=function(){try{var e=la&&la.require&&la.require("util").types;return e?e:ua&&ua.binding&&ua.binding("util")}catch(t){}}(),ha=da&&da.isArrayBuffer,pa=da&&da.isDate,ma=da&&da.isMap,va=da&&da.isRegExp,ga=da&&da.isSet,fa=da&&da.isTypedArray,ba=C("length"),ya=I(Zi),ka=I(Xi),Sa=I(ea),wa=function Ma(e){function t(e){if(sl(e)&&!bh(e)&&!(e instanceof n)){if(e instanceof a)return e;if(bu.call(e,"__wrapped__"))return ao(e)}return new a(e)}function i(){}function a(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=ne}function n(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Ne,this.__views__=[]}function b(){var e=new n(this.__wrapped__);return e.__actions__=Un(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Un(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Un(this.__views__),e}function I(){if(this.__filtered__){var e=new n(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e}function Q(){var e=this.__wrapped__.value(),t=this.__dir__,i=bh(e),a=0>t,n=i?e.length:0,r=Cr(0,n,this.__views__),o=r.start,s=r.end,l=s-o,c=a?s:o-1,u=this.__iteratees__,d=u.length,h=0,p=Hu(l,this.__takeCount__);if(!i||!a&&n==l&&p==l)return kn(e,this.__actions__);var m=[];e:for(;l--&&p>h;){c+=t;for(var v=-1,g=e[c];++vi)return!1;var a=t.length-1;return i==a?t.pop():$u.call(t,i,1),--this.size,!0}function oi(e){var t=this.__data__,i=Ei(t,e);return 0>i?ne:t[i][1]}function si(e){return Ei(this.__data__,e)>-1}function li(e,t){var i=this.__data__,a=Ei(i,e);return 0>a?(++this.size,i.push([e,t])):i[a][1]=t,this}function ci(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t=e?e:i),t!==ne&&(e=e>=t?e:t)),e}function Ui(e,t,i,a,n,r){var o,l=t&pe,c=t&me,u=t&ve;if(i&&(o=n?i(e,a,n,r):i(e)),o!==ne)return o;if(!ol(e))return e;var d=bh(e);if(d){if(o=Pr(e),!l)return Un(e,o)}else{var h=Td(e),p=h==Qe||h==Je;if(kh(e))return In(e,l);if(h==tt||h==We||p&&!n){if(o=c||p?{}:Er(e),!l)return c?jn(e,Li(o,e)):Nn(e,$i(o,e))}else{if(!Ji[h])return n?e:{};o=Ar(e,h,l)}}r||(r=new bi);var m=r.get(e);if(m)return m;r.set(e,o),Mh(e)?e.forEach(function(a){o.add(Ui(a,t,i,a,e,r))}):wh(e)&&e.forEach(function(a,n){o.set(n,Ui(a,t,i,n,e,r))});var v=u?c?br:fr:c?Wl:Fl,g=d?ne:v(e);return s(g||e,function(a,n){g&&(n=a,a=e[n]),Pi(o,n,Ui(a,t,i,n,e,r))}),o}function xi(e){var t=Fl(e);return function(i){return Ni(i,e,t)}}function Ni(e,t,i){var a=i.length;if(null==e)return!a;for(e=cu(e);a--;){var n=i[a],r=t[n],o=e[n];if(o===ne&&!(n in e)||!r(o))return!1}return!0}function ji(e,t,i){if("function"!=typeof e)throw new hu(le);return Ad(function(){e.apply(ne,i)},t)}function Bi(e,t,i,a){var n=-1,r=d,o=!0,s=e.length,l=[],c=t.length;if(!s)return l;i&&(t=p(t,V(i))),a?(r=h,o=!1):t.length>=oe&&(r=R,o=!1,t=new vi(t));e:for(;++ni&&(i=-i>n?0:n+i),a=a===ne||a>n?n:Ml(a),0>a&&(a+=n),a=i>a?0:Ol(a);a>i;)e[i++]=t;return e}function qi(e,t){var i=[];return gd(e,function(e,a,n){t(e,a,n)&&i.push(e)}),i}function Zi(e,t,i,a,n){var r=-1,o=e.length;for(i||(i=Lr),n||(n=[]);++r0&&i(s)?t>1?Zi(s,t-1,i,a,n):m(n,s):a||(n[n.length]=s)}return n}function Xi(e,t){return e&&bd(e,t,Fl)}function ea(e,t){return e&&yd(e,t,Fl)}function ta(e,t){return u(t,function(t){return al(e[t])})}function na(e,t){t=On(t,e);for(var i=0,a=t.length;null!=e&&a>i;)e=e[eo(t[i++])];return i&&i==a?e:ne}function ra(e,t,i){var a=t(e);return bh(e)?a:m(a,i(e))}function sa(e){return null==e?e===ne?lt:et:Du&&Du in cu(e)?Or(e):Gr(e)}function la(e,t){return e>t}function ua(e,t){return null!=e&&bu.call(e,t)}function da(e,t){return null!=e&&t in cu(e)}function ba(e,t,i){return e>=Hu(t,i)&&e=120&&u.length>=120)?new vi(o&&u):ne}u=e[0];var m=-1,v=s[0];e:for(;++me}function Fa(e,t){var i=-1,a=Hs(e)?nu(e.length):[];return gd(e,function(e,n,r){a[++i]=t(e,n,r)}),a}function Wa(e){var t=_r(e);return 1==t.length&&t[0][2]?Fr(t[0][0],t[0][1]):function(i){return i===e||La(i,e,t)}}function Ya(e,t){return Rr(e)&&Br(t)?Fr(eo(e),t):function(i){var a=Nl(i,e);return a===ne&&a===t?Bl(i,e):Ea(t,a,ge|fe)}}function za(e,t,i,a,n){e!==t&&bd(t,function(r,o){if(n||(n=new bi),ol(r))Ga(e,t,o,i,za,a,n);else{var s=a?a(Qr(e,o),r,o+"",e,t,n):ne;s===ne&&(s=r),Ti(e,o,s)}},Wl)}function Ga(e,t,i,a,n,r,o){var s=Qr(e,i),l=Qr(t,i),c=o.get(l);if(c)return void Ti(e,i,c);var u=r?r(s,l,i+"",e,t,o):ne,d=u===ne;if(d){var h=bh(l),p=!h&&kh(l),m=!h&&!p&&Oh(l);u=l,h||p||m?bh(s)?u=s:Ks(s)?u=Un(s):p?(d=!1,u=In(l,!0)):m?(d=!1,u=$n(l,!0)):u=[]:vl(l)||fh(l)?(u=s,fh(s)?u=Il(s):(!ol(s)||al(s))&&(u=Er(l))):d=!1}d&&(o.set(l,u),n(u,l,a,r,o),o["delete"](l)),Ti(e,i,u)}function qa(e,t){var i=e.length;if(i)return t+=0>t?i:0,Vr(t,i)?e[t]:ne}function Ha(e,t,i){t=t.length?p(t,function(e){return bh(e)?function(t){return na(t,1===e.length?e[0]:e)}:e}):[$c];var a=-1;t=p(t,V(Sr()));var n=Fa(e,function(e,i,n){var r=p(t,function(t){return t(e)});return{criteria:r,index:++a,value:e}});return P(n,function(e,t){return Vn(e,t,i)})}function Ka(e,t){return Qa(e,t,function(t,i){return Bl(e,i)})}function Qa(e,t,i){for(var a=-1,n=t.length,r={};++a-1;)s!==e&&$u.call(s,l,1),$u.call(e,l,1);return e}function Xa(e,t){for(var i=e?t.length:0,a=i-1;i--;){var n=t[i];if(i==a||n!==r){var r=n;Vr(n)?$u.call(e,n,1):fn(e,n)}}return e}function en(e,t){return e+Bu(Ju()*(t-e+1))}function tn(e,t,i,a){for(var n=-1,r=qu(ju((t-e)/(i||1)),0),o=nu(r);r--;)o[a?r:++n]=e,e+=i;return o}function an(e,t){var i="";if(!e||1>t||t>Re)return i;do t%2&&(i+=e),t=Bu(t/2),t&&(e+=e);while(t);return i}function nn(e,t){return $d(qr(e,t,$c),e+"")}function rn(e){return Oi(tc(e))}function on(e,t){var i=tc(e);return Xr(i,Ri(t,0,i.length))}function sn(e,t,i,a){if(!ol(e))return e;t=On(t,e);for(var n=-1,r=t.length,o=r-1,s=e;null!=s&&++nt&&(t=-t>n?0:n+t),i=i>n?n:i,0>i&&(i+=n),n=t>i?0:i-t>>>0,t>>>=0;for(var r=nu(n);++a=n){for(;n>a;){var r=a+n>>>1,o=e[r];null!==o&&!bl(o)&&(i?t>=o:t>o)?a=r+1:n=r}return n}return hn(e,t,$c,i)}function hn(e,t,i,a){var n=0,r=null==e?0:e.length;if(0===r)return 0;t=i(t);for(var o=t!==t,s=null===t,l=bl(t),c=t===ne;r>n;){var u=Bu((n+r)/2),d=i(e[u]),h=d!==ne,p=null===d,m=d===d,v=bl(d);if(o)var g=a||m;else g=c?m&&(a||h):s?m&&h&&(a||!p):l?m&&h&&!p&&(a||!v):p||v?!1:a?t>=d:t>d;g?n=u+1:r=u}return Hu(r,je)}function pn(e,t){for(var i=-1,a=e.length,n=0,r=[];++i=oe){var c=t?null:Md(e);if(c)return H(c);o=!1,n=R,l=new vi}else l=t?[]:s;e:for(;++aa)return a?gn(e[0]):[];for(var n=-1,r=nu(a);++na?t[a]:ne;i(o,e[a],s)}return o}function _n(e){return Ks(e)?e:[]}function Mn(e){return"function"==typeof e?e:$c}function On(e,t){return bh(e)?e:Rr(e,t)?[e]:Ld(Pl(e))}function Cn(e,t,i){var a=e.length;return i=i===ne?a:i,!t&&i>=a?e:cn(e,t,i)}function In(e,t){if(t)return e.slice();var i=e.length,a=Tu?Tu(i):new e.constructor(i);return e.copy(a),a}function Tn(e){var t=new e.constructor(e.byteLength);return new Iu(t).set(new Iu(e)),t}function Pn(e,t){var i=t?Tn(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.byteLength)}function En(e){var t=new e.constructor(e.source,Gt.exec(e));return t.lastIndex=e.lastIndex,t}function An(e){return pd?cu(pd.call(e)):{}}function $n(e,t){var i=t?Tn(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.length)}function Ln(e,t){if(e!==t){var i=e!==ne,a=null===e,n=e===e,r=bl(e),o=t!==ne,s=null===t,l=t===t,c=bl(t);if(!s&&!c&&!r&&e>t||r&&o&&l&&!s&&!c||a&&o&&l||!i&&l||!n)return 1;if(!a&&!r&&!c&&t>e||c&&i&&n&&!a&&!r||s&&i&&n||!o&&n||!l)return-1}return 0}function Vn(e,t,i){for(var a=-1,n=e.criteria,r=t.criteria,o=n.length,s=i.length;++a=s)return l;var c=i[a];return l*("desc"==c?-1:1)}}return e.index-t.index}function Dn(e,t,i,a){for(var n=-1,r=e.length,o=i.length,s=-1,l=t.length,c=qu(r-o,0),u=nu(l+c),d=!a;++sn)&&(u[i[n]]=e[n]);for(;c--;)u[s++]=e[n++];return u}function Rn(e,t,i,a){for(var n=-1,r=e.length,o=-1,s=i.length,l=-1,c=t.length,u=qu(r-s,0),d=nu(u+c),h=!a;++nn)&&(d[p+i[o]]=e[n++]);return d}function Un(e,t){var i=-1,a=e.length;for(t||(t=nu(a));++i1?i[n-1]:ne,o=n>2?i[2]:ne;for(r=e.length>3&&"function"==typeof r?(n--,r):ne,o&&Dr(i[0],i[1],o)&&(r=3>n?ne:r,n=1),t=cu(t);++ao&&s[0]!==c&&s[o-1]!==c?[]:q(s,c);if(o-=u.length,i>o)return or(e,t,Zn,a.placeholder,ne,s,u,ne,ne,i-o);var d=this&&this!==oa&&this instanceof a?n:e;return r(d,this,s)}var n=Hn(e);return a}function Qn(e){return function(t,i,a){var n=cu(t);if(!Hs(t)){var r=Sr(i,3);t=Fl(t),i=function(e){return r(n[e],e,n)}}var o=e(t,i,a);return o>-1?n[r?t[o]:o]:ne}}function Jn(e){return gr(function(t){var i=t.length,n=i,r=a.prototype.thru;for(e&&t.reverse();n--;){var o=t[n];if("function"!=typeof o)throw new hu(le);if(r&&!s&&"wrapper"==yr(o))var s=new a([],!0)}for(n=s?n:i;++nf){var w=q(b,k);return or(e,t,Zn,u.placeholder,i,b,w,s,l,c-f)}var _=h?i:this,M=p?_[e]:e;return f=b.length,s?b=Kr(b,s):v&&f>1&&b.reverse(),d&&f>l&&(b.length=l),this&&this!==oa&&this instanceof u&&(M=g||Hn(M)),M.apply(_,b)}var d=t&Oe,h=t&be,p=t&ye,m=t&(Se|we),v=t&Ie,g=p?ne:Hn(e);return u}function Xn(e,t){return function(i,a){return Oa(i,e,t(a),{})}}function er(e,t){return function(i,a){var n;if(i===ne&&a===ne)return t;if(i!==ne&&(n=i),a!==ne){if(n===ne)return a;"string"==typeof i||"string"==typeof a?(i=vn(i),a=vn(a)):(i=mn(i),a=mn(a)),n=e(i,a)}return n}}function tr(e){return gr(function(t){return t=p(t,V(Sr())),nn(function(i){var a=this;return e(t,function(e){return r(e,a,i)})})})}function ir(e,t){t=t===ne?" ":vn(t);var i=t.length;if(2>i)return i?an(t,e):t;var a=an(t,ju(e/Z(t)));return F(t)?Cn(X(a),0,e).join(""):a.slice(0,e)}function ar(e,t,i,a){function n(){for(var t=-1,l=arguments.length,c=-1,u=a.length,d=nu(u+l),h=this&&this!==oa&&this instanceof n?s:e;++ct?1:-1:_l(a),tn(t,i,a,e)}}function rr(e){return function(t,i){return("string"!=typeof t||"string"!=typeof i)&&(t=Cl(t),i=Cl(i)),e(t,i)}}function or(e,t,i,a,n,r,o,s,l,c){var u=t&Se,d=u?o:ne,h=u?ne:o,p=u?r:ne,m=u?ne:r;t|=u?_e:Me,t&=~(u?Me:_e),t&ke||(t&=~(be|ye));var v=[e,t,n,p,d,m,h,s,l,c],g=i.apply(ne,v);return xr(e)&&Ed(g,v),g.placeholder=a,Jr(g,e,t)}function sr(e){var t=lu[e];return function(e,i){if(e=Cl(e),i=null==i?0:Hu(Ml(i),292),i&&Yu(e)){var a=(Pl(e)+"e").split("e"),n=t(a[0]+"e"+(+a[1]+i));return a=(Pl(n)+"e").split("e"),+(a[0]+"e"+(+a[1]-i))}return t(e)}}function lr(e){return function(t){var i=Td(t);return i==Ze?z(t):i==rt?K(t):$(t,e(t))}}function cr(e,t,i,a,n,r,o,s){var l=t&ye;if(!l&&"function"!=typeof e)throw new hu(le);var c=a?a.length:0;if(c||(t&=~(_e|Me),a=n=ne),o=o===ne?o:qu(Ml(o),0),s=s===ne?s:Ml(s),c-=n?n.length:0,t&Me){var u=a,d=n;a=n=ne}var h=l?ne:Od(e),p=[e,t,i,a,n,u,d,r,o,s];if(h&&Yr(p,h),e=p[0],t=p[1],i=p[2],a=p[3],n=p[4],s=p[9]=p[9]===ne?l?0:e.length:qu(p[9]-c,0),!s&&t&(Se|we)&&(t&=~(Se|we)),t&&t!=be)m=t==Se||t==we?Kn(e,t,s):t!=_e&&t!=(be|_e)||n.length?Zn.apply(ne,p):ar(e,t,i,a);else var m=zn(e,t,i);var v=h?kd:Ed;return Jr(v(m,p),e,t)}function ur(e,t,i,a){return e===ne||qs(e,vu[i])&&!bu.call(a,i)?t:e}function dr(e,t,i,a,n,r){return ol(e)&&ol(t)&&(r.set(t,e),za(e,t,ne,dr,r),r["delete"](t)),e}function hr(e){return vl(e)?ne:e}function pr(e,t,i,a,n,r){var o=i&ge,s=e.length,l=t.length;if(s!=l&&!(o&&l>s))return!1;var c=r.get(e),u=r.get(t);if(c&&u)return c==t&&u==e;var d=-1,h=!0,p=i&fe?new vi:ne;for(r.set(e,t),r.set(t,e);++d1?"& ":"")+t[a],t=t.join(i>2?", ":" "),e.replace(Nt,"{\n/* [wrapped with "+t+"] */\n")}function Lr(e){return bh(e)||fh(e)||!!(Lu&&e&&e[Lu])}function Vr(e,t){var i=typeof e;return t=null==t?Re:t,!!t&&("number"==i||"symbol"!=i&&Jt.test(e))&&e>-1&&e%1==0&&t>e}function Dr(e,t,i){if(!ol(i))return!1;var a=typeof t;return("number"==a?Hs(i)&&Vr(t,i.length):"string"==a&&t in i)?qs(i[t],e):!1}function Rr(e,t){if(bh(e))return!1;var i=typeof e;return"number"==i||"symbol"==i||"boolean"==i||null==e||bl(e)?!0:Lt.test(e)||!$t.test(e)||null!=t&&e in cu(t)}function Ur(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}function xr(e){var i=yr(e),a=t[i];if("function"!=typeof a||!(i in n.prototype))return!1;if(e===a)return!0;var r=Od(a);return!!r&&e===r[0]}function Nr(e){return!!ku&&ku in e}function jr(e){var t=e&&e.constructor,i="function"==typeof t&&t.prototype||vu; return e===i}function Br(e){return e===e&&!ol(e)}function Fr(e,t){return function(i){return null==i?!1:i[e]===t&&(t!==ne||e in cu(i))}}function Wr(e){var t=Ls(e,function(e){return i.size===de&&i.clear(),e}),i=t.cache;return t}function Yr(e,t){var i=e[1],a=t[1],n=i|a,r=(be|ye|Oe)>n,o=a==Oe&&i==Se||a==Oe&&i==Ce&&e[7].length<=t[8]||a==(Oe|Ce)&&t[7].length<=t[8]&&i==Se;if(!r&&!o)return e;a&be&&(e[2]=t[2],n|=i&be?0:ke);var s=t[3];if(s){var l=e[3];e[3]=l?Dn(l,s,t[4]):s,e[4]=l?q(e[3],he):t[4]}return s=t[5],s&&(l=e[5],e[5]=l?Rn(l,s,t[6]):s,e[6]=l?q(e[5],he):t[6]),s=t[7],s&&(e[7]=s),a&Oe&&(e[8]=null==e[8]?t[8]:Hu(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}function zr(e){var t=[];if(null!=e)for(var i in cu(e))t.push(i);return t}function Gr(e){return Su.call(e)}function qr(e,t,i){return t=qu(t===ne?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=qu(a.length-t,0),s=nu(o);++n0){if(++t>=Ee)return arguments[0]}else t=0;return e.apply(ne,arguments)}}function Xr(e,t){var i=-1,a=e.length,n=a-1;for(t=t===ne?a:t;++it)return[];for(var n=0,r=0,o=nu(ju(a/t));a>n;)o[r++]=cn(e,n,n+=t);return o}function ro(e){for(var t=-1,i=null==e?0:e.length,a=0,n=[];++tt?0:t,a)):[]}function lo(e,t,i){var a=null==e?0:e.length;return a?(t=i||t===ne?1:Ml(t),t=a-t,cn(e,0,0>t?0:t)):[]}function co(e,t){return e&&e.length?yn(e,Sr(t,3),!0,!0):[]}function uo(e,t){return e&&e.length?yn(e,Sr(t,3),!0):[]}function ho(e,t,i,a){var n=null==e?0:e.length;return n?(i&&"number"!=typeof i&&Dr(e,t,i)&&(i=0,a=n),Gi(e,t,i,a)):[]}function po(e,t,i){var a=null==e?0:e.length;if(!a)return-1;var n=null==i?0:Ml(i);return 0>n&&(n=qu(a+n,0)),S(e,Sr(t,3),n)}function mo(e,t,i){var a=null==e?0:e.length;if(!a)return-1;var n=a-1;return i!==ne&&(n=Ml(i),n=0>i?qu(a+n,0):Hu(n,a-1)),S(e,Sr(t,3),n,!0)}function vo(e){var t=null==e?0:e.length;return t?Zi(e,1):[]}function go(e){var t=null==e?0:e.length;return t?Zi(e,De):[]}function fo(e,t){var i=null==e?0:e.length;return i?(t=t===ne?1:Ml(t),Zi(e,t)):[]}function bo(e){for(var t=-1,i=null==e?0:e.length,a={};++tn&&(n=qu(a+n,0)),w(e,t,n)}function So(e){var t=null==e?0:e.length;return t?cn(e,0,-1):[]}function wo(e,t){return null==e?"":zu.call(e,t)}function _o(e){var t=null==e?0:e.length;return t?e[t-1]:ne}function Mo(e,t,i){var a=null==e?0:e.length;if(!a)return-1;var n=a;return i!==ne&&(n=Ml(i),n=0>n?qu(a+n,0):Hu(n,a-1)),t===t?J(e,t,n):S(e,M,n,!0)}function Oo(e,t){return e&&e.length?qa(e,Ml(t)):ne}function Co(e,t){return e&&e.length&&t&&t.length?Za(e,t):e}function Io(e,t,i){return e&&e.length&&t&&t.length?Za(e,t,Sr(i,2)):e}function To(e,t,i){return e&&e.length&&t&&t.length?Za(e,t,ne,i):e}function Po(e,t){var i=[];if(!e||!e.length)return i;var a=-1,n=[],r=e.length;for(t=Sr(t,3);++aa&&qs(e[a],t))return a}return-1}function Do(e,t){return dn(e,t,!0)}function Ro(e,t,i){return hn(e,t,Sr(i,2),!0)}function Uo(e,t){var i=null==e?0:e.length;if(i){var a=dn(e,t,!0)-1;if(qs(e[a],t))return a}return-1}function xo(e){return e&&e.length?pn(e):[]}function No(e,t){return e&&e.length?pn(e,Sr(t,2)):[]}function jo(e){var t=null==e?0:e.length;return t?cn(e,1,t):[]}function Bo(e,t,i){return e&&e.length?(t=i||t===ne?1:Ml(t),cn(e,0,0>t?0:t)):[]}function Fo(e,t,i){var a=null==e?0:e.length;return a?(t=i||t===ne?1:Ml(t),t=a-t,cn(e,0>t?0:t,a)):[]}function Wo(e,t){return e&&e.length?yn(e,Sr(t,3),!1,!0):[]}function Yo(e,t){return e&&e.length?yn(e,Sr(t,3)):[]}function zo(e){return e&&e.length?gn(e):[]}function Go(e,t){return e&&e.length?gn(e,Sr(t,2)):[]}function qo(e,t){return t="function"==typeof t?t:ne,e&&e.length?gn(e,ne,t):[]}function Ho(e){if(!e||!e.length)return[];var t=0;return e=u(e,function(e){return Ks(e)?(t=qu(e.length,t),!0):void 0}),A(t,function(t){return p(e,C(t))})}function Ko(e,t){if(!e||!e.length)return[];var i=Ho(e);return null==t?i:p(i,function(e){return r(t,ne,e)})}function Qo(e,t){return wn(e||[],t||[],Pi)}function Jo(e,t){return wn(e||[],t||[],sn)}function Zo(e){var i=t(e);return i.__chain__=!0,i}function Xo(e,t){return t(e),e}function es(e,t){return t(e)}function ts(){return Zo(this)}function is(){return new a(this.value(),this.__chain__)}function as(){this.__values__===ne&&(this.__values__=wl(this.value()));var e=this.__index__>=this.__values__.length,t=e?ne:this.__values__[this.__index__++];return{done:e,value:t}}function ns(){return this}function rs(e){for(var t,a=this;a instanceof i;){var n=ao(a);n.__index__=0,n.__values__=ne,t?r.__wrapped__=n:t=n;var r=n;a=a.__wrapped__}return r.__wrapped__=e,t}function os(){var e=this.__wrapped__;if(e instanceof n){var t=e;return this.__actions__.length&&(t=new n(this)),t=t.reverse(),t.__actions__.push({func:es,args:[Eo],thisArg:ne}),new a(t,this.__chain__)}return this.thru(Eo)}function ss(){return kn(this.__wrapped__,this.__actions__)}function ls(e,t,i){var a=bh(e)?c:Yi;return i&&Dr(e,t,i)&&(t=ne),a(e,Sr(t,3))}function cs(e,t){var i=bh(e)?u:qi;return i(e,Sr(t,3))}function us(e,t){return Zi(gs(e,t),1)}function ds(e,t){return Zi(gs(e,t),De)}function hs(e,t,i){return i=i===ne?1:Ml(i),Zi(gs(e,t),i)}function ps(e,t){var i=bh(e)?s:gd;return i(e,Sr(t,3))}function ms(e,t){var i=bh(e)?l:fd;return i(e,Sr(t,3))}function vs(e,t,i,a){e=Hs(e)?e:tc(e),i=i&&!a?Ml(i):0;var n=e.length;return 0>i&&(i=qu(n+i,0)),fl(e)?n>=i&&e.indexOf(t,i)>-1:!!n&&w(e,t,i)>-1}function gs(e,t){var i=bh(e)?p:Fa;return i(e,Sr(t,3))}function fs(e,t,i,a){return null==e?[]:(bh(t)||(t=null==t?[]:[t]),i=a?ne:i,bh(i)||(i=null==i?[]:[i]),Ha(e,t,i))}function bs(e,t,i){var a=bh(e)?v:T,n=arguments.length<3;return a(e,Sr(t,4),i,n,gd)}function ys(e,t,i){var a=bh(e)?g:T,n=arguments.length<3;return a(e,Sr(t,4),i,n,fd)}function ks(e,t){var i=bh(e)?u:qi;return i(e,Vs(Sr(t,3)))}function Ss(e){var t=bh(e)?Oi:rn;return t(e)}function ws(e,t,i){t=(i?Dr(e,t,i):t===ne)?1:Ml(t);var a=bh(e)?Ci:on;return a(e,t)}function _s(e){var t=bh(e)?Ii:ln;return t(e)}function Ms(e){if(null==e)return 0;if(Hs(e))return fl(e)?Z(e):e.length;var t=Td(e);return t==Ze||t==rt?e.size:Na(e).length}function Os(e,t,i){var a=bh(e)?f:un;return i&&Dr(e,t,i)&&(t=ne),a(e,Sr(t,3))}function Cs(e,t){if("function"!=typeof t)throw new hu(le);return e=Ml(e),function(){return--e<1?t.apply(this,arguments):void 0}}function Is(e,t,i){return t=i?ne:t,t=e&&null==t?e.length:t,cr(e,Oe,ne,ne,ne,ne,t)}function Ts(e,t){var i;if("function"!=typeof t)throw new hu(le);return e=Ml(e),function(){return--e>0&&(i=t.apply(this,arguments)),1>=e&&(t=ne),i}}function Ps(e,t,i){t=i?ne:t;var a=cr(e,Se,ne,ne,ne,ne,ne,t);return a.placeholder=Ps.placeholder,a}function Es(e,t,i){t=i?ne:t;var a=cr(e,we,ne,ne,ne,ne,ne,t);return a.placeholder=Es.placeholder,a}function As(e,t,i){function a(t){var i=h,a=p;return h=p=ne,b=t,v=e.apply(a,i)}function n(e){return b=e,g=Ad(s,t),y?a(e):v}function r(e){var i=e-f,a=e-b,n=t-i;return k?Hu(n,m-a):n}function o(e){var i=e-f,a=e-b;return f===ne||i>=t||0>i||k&&a>=m}function s(){var e=oh();return o(e)?l(e):void(g=Ad(s,r(e)))}function l(e){return g=ne,S&&h?a(e):(h=p=ne,v)}function c(){g!==ne&&_d(g),b=0,h=f=p=g=ne}function u(){return g===ne?v:l(oh())}function d(){var e=oh(),i=o(e);if(h=arguments,p=this,f=e,i){if(g===ne)return n(f);if(k)return _d(g),g=Ad(s,t),a(f)}return g===ne&&(g=Ad(s,t)),v}var h,p,m,v,g,f,b=0,y=!1,k=!1,S=!0;if("function"!=typeof e)throw new hu(le);return t=Cl(t)||0,ol(i)&&(y=!!i.leading,k="maxWait"in i,m=k?qu(Cl(i.maxWait)||0,t):m,S="trailing"in i?!!i.trailing:S),d.cancel=c,d.flush=u,d}function $s(e){return cr(e,Ie)}function Ls(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new hu(le);var i=function(){var a=arguments,n=t?t.apply(this,a):a[0],r=i.cache;if(r.has(n))return r.get(n);var o=e.apply(this,a);return i.cache=r.set(n,o)||r,o};return i.cache=new(Ls.Cache||ci),i}function Vs(e){if("function"!=typeof e)throw new hu(le);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}function Ds(e){return Ts(2,e)}function Rs(e,t){if("function"!=typeof e)throw new hu(le);return t=t===ne?t:Ml(t),nn(e,t)}function Us(e,t){if("function"!=typeof e)throw new hu(le);return t=null==t?0:qu(Ml(t),0),nn(function(i){var a=i[t],n=Cn(i,0,t);return a&&m(n,a),r(e,this,n)})}function xs(e,t,i){var a=!0,n=!0;if("function"!=typeof e)throw new hu(le);return ol(i)&&(a="leading"in i?!!i.leading:a,n="trailing"in i?!!i.trailing:n),As(e,t,{leading:a,maxWait:t,trailing:n})}function Ns(e){return Is(e,1)}function js(e,t){return hh(Mn(t),e)}function Bs(){if(!arguments.length)return[];var e=arguments[0];return bh(e)?e:[e]}function Fs(e){return Ui(e,ve)}function Ws(e,t){return t="function"==typeof t?t:ne,Ui(e,ve,t)}function Ys(e){return Ui(e,pe|ve)}function zs(e,t){return t="function"==typeof t?t:ne,Ui(e,pe|ve,t)}function Gs(e,t){return null==t||Ni(e,t,Fl(t))}function qs(e,t){return e===t||e!==e&&t!==t}function Hs(e){return null!=e&&rl(e.length)&&!al(e)}function Ks(e){return sl(e)&&Hs(e)}function Qs(e){return e===!0||e===!1||sl(e)&&sa(e)==Ge}function Js(e){return sl(e)&&1===e.nodeType&&!vl(e)}function Zs(e){if(null==e)return!0;if(Hs(e)&&(bh(e)||"string"==typeof e||"function"==typeof e.splice||kh(e)||Oh(e)||fh(e)))return!e.length;var t=Td(e);if(t==Ze||t==rt)return!e.size;if(jr(e))return!Na(e).length;for(var i in e)if(bu.call(e,i))return!1;return!0}function Xs(e,t){return Ea(e,t)}function el(e,t,i){i="function"==typeof i?i:ne;var a=i?i(e,t):ne;return a===ne?Ea(e,t,ne,i):!!a}function tl(e){if(!sl(e))return!1;var t=sa(e);return t==Ke||t==He||"string"==typeof e.message&&"string"==typeof e.name&&!vl(e)}function il(e){return"number"==typeof e&&Yu(e)}function al(e){if(!ol(e))return!1;var t=sa(e);return t==Qe||t==Je||t==ze||t==at}function nl(e){return"number"==typeof e&&e==Ml(e)}function rl(e){return"number"==typeof e&&e>-1&&e%1==0&&Re>=e}function ol(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function sl(e){return null!=e&&"object"==typeof e}function ll(e,t){return e===t||La(e,t,_r(t))}function cl(e,t,i){return i="function"==typeof i?i:ne,La(e,t,_r(t),i)}function ul(e){return ml(e)&&e!=+e}function dl(e){if(Pd(e))throw new ou(se);return Va(e)}function hl(e){return null===e}function pl(e){return null==e}function ml(e){return"number"==typeof e||sl(e)&&sa(e)==Xe}function vl(e){if(!sl(e)||sa(e)!=tt)return!1;var t=Pu(e);if(null===t)return!0;var i=bu.call(t,"constructor")&&t.constructor;return"function"==typeof i&&i instanceof i&&fu.call(i)==wu}function gl(e){return nl(e)&&e>=-Re&&Re>=e}function fl(e){return"string"==typeof e||!bh(e)&&sl(e)&&sa(e)==ot}function bl(e){return"symbol"==typeof e||sl(e)&&sa(e)==st}function yl(e){return e===ne}function kl(e){return sl(e)&&Td(e)==ct}function Sl(e){return sl(e)&&sa(e)==ut}function wl(e){if(!e)return[];if(Hs(e))return fl(e)?X(e):Un(e);if(Vu&&e[Vu])return Y(e[Vu]());var t=Td(e),i=t==Ze?z:t==rt?H:tc;return i(e)}function _l(e){if(!e)return 0===e?e:0;if(e=Cl(e),e===De||e===-De){var t=0>e?-1:1;return t*Ue}return e===e?e:0}function Ml(e){var t=_l(e),i=t%1;return t===t?i?t-i:t:0}function Ol(e){return e?Ri(Ml(e),0,Ne):0}function Cl(e){if("number"==typeof e)return e;if(bl(e))return xe;if(ol(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=ol(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=L(e);var i=Ht.test(e);return i||Qt.test(e)?aa(e.slice(2),i?2:8):qt.test(e)?xe:+e}function Il(e){return xn(e,Wl(e))}function Tl(e){return e?Ri(Ml(e),-Re,Re):0===e?e:0}function Pl(e){return null==e?"":vn(e)}function El(e,t){var i=vd(e);return null==t?i:$i(i,t)}function Al(e,t){return k(e,Sr(t,3),Xi)}function $l(e,t){return k(e,Sr(t,3),ea)}function Ll(e,t){return null==e?e:bd(e,Sr(t,3),Wl)}function Vl(e,t){return null==e?e:yd(e,Sr(t,3),Wl)}function Dl(e,t){return e&&Xi(e,Sr(t,3))}function Rl(e,t){return e&&ea(e,Sr(t,3))}function Ul(e){return null==e?[]:ta(e,Fl(e))}function xl(e){return null==e?[]:ta(e,Wl(e))}function Nl(e,t,i){var a=null==e?ne:na(e,t);return a===ne?i:a}function jl(e,t){return null!=e&&Tr(e,t,ua)}function Bl(e,t){return null!=e&&Tr(e,t,da)}function Fl(e){return Hs(e)?Mi(e):Na(e)}function Wl(e){return Hs(e)?Mi(e,!0):ja(e)}function Yl(e,t){var i={};return t=Sr(t,3),Xi(e,function(e,a,n){Vi(i,t(e,a,n),e)}),i}function zl(e,t){var i={};return t=Sr(t,3),Xi(e,function(e,a,n){Vi(i,a,t(e,a,n))}),i}function Gl(e,t){return ql(e,Vs(Sr(t)))}function ql(e,t){if(null==e)return{};var i=p(br(e),function(e){return[e]});return t=Sr(t),Qa(e,i,function(e,i){return t(e,i[0])})}function Hl(e,t,i){t=On(t,e);var a=-1,n=t.length;for(n||(n=1,e=ne);++at){var a=e;e=t,t=a}if(i||e%1||t%1){var n=Ju();return Hu(e+n*(t-e+ia("1e-"+((n+"").length-1))),t)}return en(e,t)}function oc(e){return Jh(Pl(e).toLowerCase())}function sc(e){return e=Pl(e),e&&e.replace(Zt,ya).replace(Wi,"")}function lc(e,t,i){e=Pl(e),t=vn(t);var a=e.length;i=i===ne?a:Ri(Ml(i),0,a);var n=i;return i-=t.length,i>=0&&e.slice(i,n)==t}function cc(e){return e=Pl(e),e&&Tt.test(e)?e.replace(Ct,ka):e}function uc(e){return e=Pl(e),e&&Rt.test(e)?e.replace(Dt,"\\$&"):e}function dc(e,t,i){e=Pl(e),t=Ml(t);var a=t?Z(e):0;if(!t||a>=t)return e;var n=(t-a)/2;return ir(Bu(n),i)+e+ir(ju(n),i)}function hc(e,t,i){e=Pl(e),t=Ml(t);var a=t?Z(e):0;return t&&t>a?e+ir(t-a,i):e}function pc(e,t,i){e=Pl(e),t=Ml(t);var a=t?Z(e):0;return t&&t>a?ir(t-a,i)+e:e}function mc(e,t,i){return i||null==t?t=0:t&&(t=+t),Qu(Pl(e).replace(Ut,""),t||0)}function vc(e,t,i){return t=(i?Dr(e,t,i):t===ne)?1:Ml(t),an(Pl(e),t)}function gc(){var e=arguments,t=Pl(e[0]);return e.length<3?t:t.replace(e[1],e[2])}function fc(e,t,i){return i&&"number"!=typeof i&&Dr(e,t,i)&&(t=i=ne),(i=i===ne?Ne:i>>>0)?(e=Pl(e),e&&("string"==typeof t||null!=t&&!_h(t))&&(t=vn(t),!t&&F(e))?Cn(X(e),0,i):e.split(t,i)):[]}function bc(e,t,i){return e=Pl(e),i=null==i?0:Ri(Ml(i),0,e.length),t=vn(t),e.slice(i,i+t.length)==t}function yc(e,i,a){var n=t.templateSettings;a&&Dr(e,i,a)&&(i=ne),e=Pl(e),i=Eh({},i,n,ur);var r,o,s=Eh({},i.imports,n.imports,ur),l=Fl(s),c=D(s,l),u=0,d=i.interpolate||Xt,h="__p += '",p=uu((i.escape||Xt).source+"|"+d.source+"|"+(d===At?zt:Xt).source+"|"+(i.evaluate||Xt).source+"|$","g"),m="//# sourceURL="+(bu.call(i,"sourceURL")?(i.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Ki+"]")+"\n";e.replace(p,function(t,i,a,n,s,l){return a||(a=n),h+=e.slice(u,l).replace(ei,j),i&&(r=!0,h+="' +\n__e("+i+") +\n'"),s&&(o=!0,h+="';\n"+s+";\n__p += '"),a&&(h+="' +\n((__t = ("+a+")) == null ? '' : __t) +\n'"),u=l+t.length,t}),h+="';\n";var v=bu.call(i,"variable")&&i.variable;if(v){if(Wt.test(v))throw new ou(ce)}else h="with (obj) {\n"+h+"\n}\n";h=(o?h.replace(wt,""):h).replace(_t,"$1").replace(Mt,"$1;"),h="function("+(v||"obj")+") {\n"+(v?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(r?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+h+"return __p\n}";var g=Zh(function(){return su(l,m+"return "+h).apply(ne,c)});if(g.source=h,tl(g))throw g;return g}function kc(e){return Pl(e).toLowerCase()}function Sc(e){return Pl(e).toUpperCase()}function wc(e,t,i){if(e=Pl(e),e&&(i||t===ne))return L(e);if(!e||!(t=vn(t)))return e;var a=X(e),n=X(t),r=U(a,n),o=x(a,n)+1;return Cn(a,r,o).join("")}function _c(e,t,i){if(e=Pl(e),e&&(i||t===ne))return e.slice(0,ee(e)+1);if(!e||!(t=vn(t)))return e;var a=X(e),n=x(a,X(t))+1;return Cn(a,0,n).join("")}function Mc(e,t,i){if(e=Pl(e),e&&(i||t===ne))return e.replace(Ut,"");if(!e||!(t=vn(t)))return e;var a=X(e),n=U(a,X(t));return Cn(a,n).join("")}function Oc(e,t){var i=Te,a=Pe;if(ol(t)){var n="separator"in t?t.separator:n;i="length"in t?Ml(t.length):i,a="omission"in t?vn(t.omission):a}e=Pl(e);var r=e.length;if(F(e)){var o=X(e);r=o.length}if(i>=r)return e;var s=i-Z(a);if(1>s)return a;var l=o?Cn(o,0,s).join(""):e.slice(0,s);if(n===ne)return l+a;if(o&&(s+=l.length-s),_h(n)){if(e.slice(s).search(n)){var c,u=l;for(n.global||(n=uu(n.source,Pl(Gt.exec(n))+"g")),n.lastIndex=0;c=n.exec(u);)var d=c.index;l=l.slice(0,d===ne?s:d)}}else if(e.indexOf(vn(n),s)!=s){var h=l.lastIndexOf(n);h>-1&&(l=l.slice(0,h))}return l+a}function Cc(e){return e=Pl(e),e&&It.test(e)?e.replace(Ot,Sa):e}function Ic(e,t,i){return e=Pl(e),t=i?ne:t,t===ne?W(e)?ae(e):y(e):e.match(t)||[]}function Tc(e){var t=null==e?0:e.length,i=Sr();return e=t?p(e,function(e){if("function"!=typeof e[1])throw new hu(le);return[i(e[0]),e[1]]}):[],nn(function(i){for(var a=-1;++ae||e>Re)return[];var i=Ne,a=Hu(e,Ne);t=Sr(t),e-=Ne;for(var n=A(a,t);++i1?e[t-1]:ne;return i="function"==typeof i?(e.pop(),i):ne,Ko(e,i)}),Jd=gr(function(e){var t=e.length,i=t?e[0]:0,r=this.__wrapped__,o=function(t){return Di(t,e)};return!(t>1||this.__actions__.length)&&r instanceof n&&Vr(i)?(r=r.slice(i,+i+(t?1:0)),r.__actions__.push({func:es,args:[o],thisArg:ne}),new a(r,this.__chain__).thru(function(e){return t&&!e.length&&e.push(ne),e})):this.thru(o)}),Zd=Bn(function(e,t,i){bu.call(e,i)?++e[i]:Vi(e,i,1)}),Xd=Qn(po),eh=Qn(mo),th=Bn(function(e,t,i){bu.call(e,i)?e[i].push(t):Vi(e,i,[t])}),ih=nn(function(e,t,i){var a=-1,n="function"==typeof t,o=Hs(e)?nu(e.length):[];return gd(e,function(e){o[++a]=n?r(t,e,i):Ca(e,t,i)}),o}),ah=Bn(function(e,t,i){Vi(e,i,t)}),nh=Bn(function(e,t,i){e[i?0:1].push(t)},function(){return[[],[]]}),rh=nn(function(e,t){if(null==e)return[];var i=t.length;return i>1&&Dr(e,t[0],t[1])?t=[]:i>2&&Dr(t[0],t[1],t[2])&&(t=[t[0]]),Ha(e,Zi(t,1),[])}),oh=xu||function(){return oa.Date.now()},sh=nn(function(e,t,i){var a=be;if(i.length){var n=q(i,kr(sh));a|=_e}return cr(e,a,t,i,n)}),lh=nn(function(e,t,i){var a=be|ye;if(i.length){var n=q(i,kr(lh));a|=_e}return cr(t,a,e,i,n)}),ch=nn(function(e,t){return ji(e,1,t)}),uh=nn(function(e,t,i){return ji(e,Cl(t)||0,i)});Ls.Cache=ci;var dh=wd(function(e,t){t=1==t.length&&bh(t[0])?p(t[0],V(Sr())):p(Zi(t,1),V(Sr()));var i=t.length;return nn(function(a){for(var n=-1,o=Hu(a.length,i);++n=t}),fh=Ia(function(){return arguments}())?Ia:function(e){return sl(e)&&bu.call(e,"callee")&&!Au.call(e,"callee")},bh=nu.isArray,yh=ha?V(ha):Ta,kh=Wu||Wc,Sh=pa?V(pa):Pa,wh=ma?V(ma):$a,_h=va?V(va):Da,Mh=ga?V(ga):Ra,Oh=fa?V(fa):Ua,Ch=rr(Ba),Ih=rr(function(e,t){return t>=e}),Th=Fn(function(e,t){if(jr(t)||Hs(t))return void xn(t,Fl(t),e);for(var i in t)bu.call(t,i)&&Pi(e,i,t[i])}),Ph=Fn(function(e,t){xn(t,Wl(t),e)}),Eh=Fn(function(e,t,i,a){xn(t,Wl(t),e,a)}),Ah=Fn(function(e,t,i,a){xn(t,Fl(t),e,a)}),$h=gr(Di),Lh=nn(function(e,t){e=cu(e);var i=-1,a=t.length,n=a>2?t[2]:ne;for(n&&Dr(t[0],t[1],n)&&(a=1);++i1),t}),xn(e,br(e),i),a&&(i=Ui(i,pe|me|ve,hr));for(var n=t.length;n--;)fn(i,t[n]);return i}),Bh=gr(function(e,t){return null==e?{}:Ka(e,t)}),Fh=lr(Fl),Wh=lr(Wl),Yh=qn(function(e,t,i){return t=t.toLowerCase(),e+(i?oc(t):t)}),zh=qn(function(e,t,i){return e+(i?"-":"")+t.toLowerCase()}),Gh=qn(function(e,t,i){return e+(i?" ":"")+t.toLowerCase()}),qh=Gn("toLowerCase"),Hh=qn(function(e,t,i){return e+(i?"_":"")+t.toLowerCase()}),Kh=qn(function(e,t,i){return e+(i?" ":"")+Jh(t)}),Qh=qn(function(e,t,i){return e+(i?" ":"")+t.toUpperCase()}),Jh=Gn("toUpperCase"),Zh=nn(function(e,t){try{return r(e,ne,t)}catch(i){return tl(i)?i:new ou(i)}}),Xh=gr(function(e,t){return s(t,function(t){t=eo(t),Vi(e,t,sh(e[t],e))}),e}),ep=Jn(),tp=Jn(!0),ip=nn(function(e,t){return function(i){return Ca(i,e,t)}}),ap=nn(function(e,t){return function(i){return Ca(e,i,t)}}),np=tr(p),rp=tr(c),op=tr(f),sp=nr(),lp=nr(!0),cp=er(function(e,t){return e+t},0),up=sr("ceil"),dp=er(function(e,t){return e/t},1),hp=sr("floor"),pp=er(function(e,t){return e*t},1),mp=sr("round"),vp=er(function(e,t){return e-t},0);return t.after=Cs,t.ary=Is,t.assign=Th,t.assignIn=Ph,t.assignInWith=Eh,t.assignWith=Ah,t.at=$h,t.before=Ts,t.bind=sh,t.bindAll=Xh,t.bindKey=lh,t.castArray=Bs,t.chain=Zo,t.chunk=no,t.compact=ro,t.concat=oo,t.cond=Tc,t.conforms=Pc,t.constant=Ec,t.countBy=Zd,t.create=El,t.curry=Ps,t.curryRight=Es,t.debounce=As,t.defaults=Lh,t.defaultsDeep=Vh,t.defer=ch,t.delay=uh,t.difference=Vd,t.differenceBy=Dd,t.differenceWith=Rd,t.drop=so,t.dropRight=lo,t.dropRightWhile=co,t.dropWhile=uo,t.fill=ho,t.filter=cs,t.flatMap=us,t.flatMapDeep=ds,t.flatMapDepth=hs,t.flatten=vo,t.flattenDeep=go,t.flattenDepth=fo,t.flip=$s,t.flow=ep,t.flowRight=tp,t.fromPairs=bo,t.functions=Ul,t.functionsIn=xl,t.groupBy=th,t.initial=So,t.intersection=Ud,t.intersectionBy=xd,t.intersectionWith=Nd,t.invert=Dh,t.invertBy=Rh,t.invokeMap=ih,t.iteratee=Lc,t.keyBy=ah,t.keys=Fl,t.keysIn=Wl,t.map=gs,t.mapKeys=Yl,t.mapValues=zl,t.matches=Vc,t.matchesProperty=Dc,t.memoize=Ls,t.merge=xh,t.mergeWith=Nh,t.method=ip,t.methodOf=ap,t.mixin=Rc,t.negate=Vs,t.nthArg=Nc,t.omit=jh,t.omitBy=Gl,t.once=Ds,t.orderBy=fs,t.over=np,t.overArgs=dh,t.overEvery=rp,t.overSome=op,t.partial=hh,t.partialRight=ph,t.partition=nh,t.pick=Bh,t.pickBy=ql,t.property=jc,t.propertyOf=Bc,t.pull=jd,t.pullAll=Co,t.pullAllBy=Io,t.pullAllWith=To,t.pullAt=Bd,t.range=sp,t.rangeRight=lp,t.rearg=mh,t.reject=ks,t.remove=Po,t.rest=Rs,t.reverse=Eo,t.sampleSize=ws,t.set=Kl,t.setWith=Ql,t.shuffle=_s,t.slice=Ao,t.sortBy=rh,t.sortedUniq=xo,t.sortedUniqBy=No,t.split=fc,t.spread=Us,t.tail=jo,t.take=Bo,t.takeRight=Fo,t.takeRightWhile=Wo,t.takeWhile=Yo,t.tap=Xo,t.throttle=xs,t.thru=es,t.toArray=wl,t.toPairs=Fh,t.toPairsIn=Wh,t.toPath=Hc,t.toPlainObject=Il,t.transform=Jl,t.unary=Ns,t.union=Fd,t.unionBy=Wd,t.unionWith=Yd,t.uniq=zo,t.uniqBy=Go,t.uniqWith=qo,t.unset=Zl,t.unzip=Ho,t.unzipWith=Ko,t.update=Xl,t.updateWith=ec,t.values=tc,t.valuesIn=ic,t.without=zd,t.words=Ic,t.wrap=js,t.xor=Gd,t.xorBy=qd,t.xorWith=Hd,t.zip=Kd,t.zipObject=Qo,t.zipObjectDeep=Jo,t.zipWith=Qd,t.entries=Fh,t.entriesIn=Wh,t.extend=Ph,t.extendWith=Eh,Rc(t,t),t.add=cp,t.attempt=Zh,t.camelCase=Yh,t.capitalize=oc,t.ceil=up,t.clamp=ac,t.clone=Fs,t.cloneDeep=Ys,t.cloneDeepWith=zs,t.cloneWith=Ws,t.conformsTo=Gs,t.deburr=sc,t.defaultTo=Ac,t.divide=dp,t.endsWith=lc,t.eq=qs,t.escape=cc,t.escapeRegExp=uc,t.every=ls,t.find=Xd,t.findIndex=po,t.findKey=Al,t.findLast=eh,t.findLastIndex=mo,t.findLastKey=$l,t.floor=hp,t.forEach=ps,t.forEachRight=ms,t.forIn=Ll,t.forInRight=Vl,t.forOwn=Dl,t.forOwnRight=Rl,t.get=Nl,t.gt=vh,t.gte=gh,t.has=jl,t.hasIn=Bl,t.head=yo,t.identity=$c,t.includes=vs,t.indexOf=ko,t.inRange=nc, t.invoke=Uh,t.isArguments=fh,t.isArray=bh,t.isArrayBuffer=yh,t.isArrayLike=Hs,t.isArrayLikeObject=Ks,t.isBoolean=Qs,t.isBuffer=kh,t.isDate=Sh,t.isElement=Js,t.isEmpty=Zs,t.isEqual=Xs,t.isEqualWith=el,t.isError=tl,t.isFinite=il,t.isFunction=al,t.isInteger=nl,t.isLength=rl,t.isMap=wh,t.isMatch=ll,t.isMatchWith=cl,t.isNaN=ul,t.isNative=dl,t.isNil=pl,t.isNull=hl,t.isNumber=ml,t.isObject=ol,t.isObjectLike=sl,t.isPlainObject=vl,t.isRegExp=_h,t.isSafeInteger=gl,t.isSet=Mh,t.isString=fl,t.isSymbol=bl,t.isTypedArray=Oh,t.isUndefined=yl,t.isWeakMap=kl,t.isWeakSet=Sl,t.join=wo,t.kebabCase=zh,t.last=_o,t.lastIndexOf=Mo,t.lowerCase=Gh,t.lowerFirst=qh,t.lt=Ch,t.lte=Ih,t.max=Qc,t.maxBy=Jc,t.mean=Zc,t.meanBy=Xc,t.min=eu,t.minBy=tu,t.stubArray=Fc,t.stubFalse=Wc,t.stubObject=Yc,t.stubString=zc,t.stubTrue=Gc,t.multiply=pp,t.nth=Oo,t.noConflict=Uc,t.noop=xc,t.now=oh,t.pad=dc,t.padEnd=hc,t.padStart=pc,t.parseInt=mc,t.random=rc,t.reduce=bs,t.reduceRight=ys,t.repeat=vc,t.replace=gc,t.result=Hl,t.round=mp,t.runInContext=Ma,t.sample=Ss,t.size=Ms,t.snakeCase=Hh,t.some=Os,t.sortedIndex=$o,t.sortedIndexBy=Lo,t.sortedIndexOf=Vo,t.sortedLastIndex=Do,t.sortedLastIndexBy=Ro,t.sortedLastIndexOf=Uo,t.startCase=Kh,t.startsWith=bc,t.subtract=vp,t.sum=iu,t.sumBy=au,t.template=yc,t.times=qc,t.toFinite=_l,t.toInteger=Ml,t.toLength=Ol,t.toLower=kc,t.toNumber=Cl,t.toSafeInteger=Tl,t.toString=Pl,t.toUpper=Sc,t.trim=wc,t.trimEnd=_c,t.trimStart=Mc,t.truncate=Oc,t.unescape=Cc,t.uniqueId=Kc,t.upperCase=Qh,t.upperFirst=Jh,t.each=ps,t.eachRight=ms,t.first=yo,Rc(t,function(){var e={};return Xi(t,function(i,a){bu.call(t.prototype,a)||(e[a]=i)}),e}(),{chain:!1}),t.VERSION=re,s(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){t[e].placeholder=t}),s(["drop","take"],function(e,t){n.prototype[e]=function(i){i=i===ne?1:qu(Ml(i),0);var a=this.__filtered__&&!t?new n(this):this.clone();return a.__filtered__?a.__takeCount__=Hu(i,a.__takeCount__):a.__views__.push({size:Hu(i,Ne),type:e+(a.__dir__<0?"Right":"")}),a},n.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),s(["filter","map","takeWhile"],function(e,t){var i=t+1,a=i==$e||i==Ve;n.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Sr(e,3),type:i}),t.__filtered__=t.__filtered__||a,t}}),s(["head","last"],function(e,t){var i="take"+(t?"Right":"");n.prototype[e]=function(){return this[i](1).value()[0]}}),s(["initial","tail"],function(e,t){var i="drop"+(t?"":"Right");n.prototype[e]=function(){return this.__filtered__?new n(this):this[i](1)}}),n.prototype.compact=function(){return this.filter($c)},n.prototype.find=function(e){return this.filter(e).head()},n.prototype.findLast=function(e){return this.reverse().find(e)},n.prototype.invokeMap=nn(function(e,t){return"function"==typeof e?new n(this):this.map(function(i){return Ca(i,e,t)})}),n.prototype.reject=function(e){return this.filter(Vs(Sr(e)))},n.prototype.slice=function(e,t){e=Ml(e);var i=this;return i.__filtered__&&(e>0||0>t)?new n(i):(0>e?i=i.takeRight(-e):e&&(i=i.drop(e)),t!==ne&&(t=Ml(t),i=0>t?i.dropRight(-t):i.take(t-e)),i)},n.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},n.prototype.toArray=function(){return this.take(Ne)},Xi(n.prototype,function(e,i){var r=/^(?:filter|find|map|reject)|While$/.test(i),o=/^(?:head|last)$/.test(i),s=t[o?"take"+("last"==i?"Right":""):i],l=o||/^find/.test(i);s&&(t.prototype[i]=function(){var i=this.__wrapped__,c=o?[1]:arguments,u=i instanceof n,d=c[0],h=u||bh(i),p=function(e){var i=s.apply(t,m([e],c));return o&&v?i[0]:i};h&&r&&"function"==typeof d&&1!=d.length&&(u=h=!1);var v=this.__chain__,g=!!this.__actions__.length,f=l&&!v,b=u&&!g;if(!l&&h){i=b?i:new n(this);var y=e.apply(i,c);return y.__actions__.push({func:es,args:[p],thisArg:ne}),new a(y,v)}return f&&b?e.apply(this,c):(y=this.thru(p),f?o?y.value()[0]:y.value():y)})}),s(["pop","push","shift","sort","splice","unshift"],function(e){var i=pu[e],a=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);t.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var t=this.value();return i.apply(bh(t)?t:[],e)}return this[a](function(t){return i.apply(bh(t)?t:[],e)})}}),Xi(n.prototype,function(e,i){var a=t[i];if(a){var n=a.name+"";bu.call(od,n)||(od[n]=[]),od[n].push({name:i,func:a})}}),od[Zn(ne,ye).name]=[{name:"wrapper",func:ne}],n.prototype.clone=b,n.prototype.reverse=I,n.prototype.value=Q,t.prototype.at=Jd,t.prototype.chain=ts,t.prototype.commit=is,t.prototype.next=as,t.prototype.plant=rs,t.prototype.reverse=os,t.prototype.toJSON=t.prototype.valueOf=t.prototype.value=ss,t.prototype.first=t.prototype.head,Vu&&(t.prototype[Vu]=ns),t},_a=wa();oa._=_a,a=function(){return _a}.call(t,i,t,n),!(a!==ne&&(n.exports=a))}).call(this)}).call(t,function(){return this}(),i(110)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i-1)r.data.mbid=e.replace("mbid:/artist/",""),r.data.mode="storyArtist",this.loadingCredit[e+i]=!0;else if(e.indexOf("mbid:/place/")>-1)r.data.mbid=e.replace("mbid:/place/",""),r.data.mode="storyPlace",this.loadingCredit[e+i]=!0;else{if(!(e.indexOf("mbid:/label/")>-1))return;r.data.mbid=e.replace("mbid:/label/",""),r.data.mode="storyLabel",this.loadingCredit[e+i]=!0}return this.$http.post(n,r,this.creditRequestOptions).then(function(n){return n.data&&n.data.success&&n.data.data&&n.data.data.value?(a.loadingCredit[e+i]=!1,a.showCreditsDetails({title:t,story:n.data.data.value})):(a.unavailableCredits[e+i]=!0,void(a.loadingCredit[e+i]=!1))})}},{key:"showCreditsDetails",value:function(e){var t="app/browse-music/components/modal/modal-credits-details.html",i="ModalCreditsDetailsController",a={title:e.title,story:e.story,credits:e.credits};this.modalService.openModal(i,t,a,"md")}},{key:"hasCreditLink",value:function(e){return e.indexOf("mbid:/artist/")>-1||e.indexOf("mbid:/label/")>-1||e.indexOf("mbid:/place/")>-1?!0:!1}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i=4&&this.socketService.emit("setBackgrounds",{color:e})}},{key:"deleteBackground",value:function(e){this.$log.debug("deleteBackground",e),this.socketService.emit("deleteBackground",e)}},{key:"uploadBackground",value:function(){var e=this;this.Upload.upload({url:""+this.socketService.host+"/backgrounds-upload",data:{filename:this.backgroundFile}}).then(function(t){e.uploadPercentage=!1},function(t){e.uploadPercentage=!1,e.$log.debug("Error status: "+t.status)},function(t){e.uploadPercentage=parseInt(100*t.loaded/t.total),100===e.uploadPercentage&&(e.uploadPercentage=!1)})}},{key:"init",value:function(){var e=this;this.registerListner(),this.initService(),this.backgroundColorSet=["#000","#999","#CCC","#C44","#CAF","#388"];var t=!this.backgroundColorSet.find(function(t){return e.uiSettingsService.uiSettings.color&&t===e.uiSettingsService.uiSettings.color});this.customBackgroundColor=this.uiSettingsService.uiSettings.color&&t?this.uiSettingsService.uiSettings.color:"#DDD"}},{key:"registerListner",value:function(){}},{key:"initService",value:function(){this.socketService.emit("getBackgrounds")}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i0&&e.push(t.prices[i].amount)})}),this.cheapestPrice=Math.min.apply(Math,e)}},{key:"goToLogin",value:function(){this.$state.go("myvolumio.login")}},{key:"goToMyVolumio",value:function(){this.$state.go(this.authUser?"myvolumio.plans":"myvolumio.signup")}},{key:"goToSettings",value:function(){this.$state.go("volumio.plugin",{pluginName:"miscellanea/my_music"})}},{key:"getPaddleProductId",value:function(){return void 0===this.productsObj[this.$scope.model.selectedProduct].prices||void 0===this.selectedPlanDuration?void 0:this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].paddleId}},{key:"getTrialParameters",value:function(){if(void 0===this.productsObj[this.$scope.model.selectedProduct].prices||void 0===this.selectedPlanDuration)return void 0;var e={trialDays:"",trialDaysAuth:"",trialAuth:""};return this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial.trialEnabled&&this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial.trialDays&&this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial.trialDaysAuth&&this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial.trialAuth&&(e.trialDays=this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial.trialDays,e.trialDaysAuth=this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial.trialDaysAuth,e.trialAuth=this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial.trialAuth),e}},{key:"isTrial",value:function(){return!!this.productsObj[this.$scope.model.selectedProduct].prices[this.selectedPlanDuration].trial}},{key:"handlePayment",value:function(){var e=this;if("free"===this.$scope.model.selectedProduct)return void this.$state.go("myvolumio.profile");var t=this.getPaddleProductId(),i="",a="",n="",r="";if(this.isTrial()){var o=this.getTrialParameters();i=o.trialDays,a=o.trialDaysAuth,r=o.trialAuth,n=0}if(void 0===t||!Number.isInteger(t))return void alert("Error, no transaction occurred, no paddleId found.");if(!this.newUser)return void alert("Error, no transaction occurred, no authenticated user found.");var s={product:t,email:this.newUser.email,passthrough:{email:this.newUser.email,uid:this.newUser.uid},trialDays:i,trialDaysAuth:a,price:n,auth:r,successCallback:function(t){e.successCallback(t)},closeCallback:function(t){e.closeCallback(t)}};this.couponCode&&(s.coupon=this.couponCode),Paddle.Checkout.open(s,!1)}},{key:"successCallback",value:function(e){this.statisticsService.signalSubscriptionCreated(this.product,this.planDuration,this.isTrial,e),this.$state.go("myvolumio.payment-success")}},{key:"closeCallback",value:function(e){this.modalService.openDefaultErrorModal("MYVOLUMIO.COMPLETE_CHECKOUT")}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;it.totalReferralsRequired?1:t.totalReferralsRequired>e.totalReferralsRequired?-1:0}):[]}},{key:"copyLink",value:function(){var e=document.getElementById("my-volumio-link-field");try{e.select(),e.setSelectionRange(0,99999),document.execCommand("copy"),this.copyDone=!0}catch(t){console.log(t),console.log("Couldnt select text")}}},{key:"shareClick",value:function(e,t){switch(e){case"email":window.location.href="mailto:?subject=Check out this awesome music player!&body=I've been using an awesome music player called Volumio. It turns your Raspberry PI into an audiophile music station. Check it out: "+t;break;case"facebook":window.open("https://www.facebook.com/sharer/sharer.php?u="+t,"_blank");break;case"twitter":window.open("http://twitter.com/share?text=I've been using an awesome music player called Volumio. It turns your Raspberry PI into an audiophile music station. Check it out!&url="+t+"&hashtags=volumio","_blank");break;case"whatsapp":window.open("https://api.whatsapp.com/send?text=Check out this awesome music player I've been using: "+t,"_blank")}}}]),e}();t["default"]=n,e.exports=t["default"]},function(e,t){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i

    '),e.put("app/plugin-manager/plugin-manager.html",'

    '),e.put("app/plugin/plugin.html",''),e.put("app/static-pages/static-page.html",'
    '),e.put("app/wizard/wizard.html",'
    '),e.put("app/browse/components/browse-hamburger-menu.html",'
  • {{\'BROWSER.DELETE_PLAYLIST\' | translate}}
  • {{\'BROWSER.SAFE_REMOVE\' | translate}}
  • {{\'BROWSER.UPDATE_FOLDER\' | translate}}
  • {{\'BROWSER.DELETE_FOLDER\' | translate}}
  • '),e.put("app/browse/components/browse-nav-buttons.html",' '),e.put("app/browse/components/browse-search-box.html",'
    '),e.put("app/browse/components/browse-sources-btn-group.html",'
    '),e.put("app/browse/components/browse-table-items.html",'
    '),e.put("app/browse/components/browse-table-sources.html",'
    {{::source.name}}/
    {{::source.name}} - {{::source.info}}
    '),e.put("app/browse-music/components/album-view.html",'
    {{ album && album.genre ? album.genre : \'Example genre\' }}

    {{ album.title }}

    {{ album.meta }}

    '),e.put("app/browse-music/components/browse-album.html",'

    {{ browse.browseService.info.title || browse.browseService.info.album }}

    {{ browse.browseService.info.artist }} {{ browse.browseService.info.year }} {{ browse.browseService.info.duration }} {{ browse.browseService.info.genre }} {{tbrowse.browseService.info.fileFormat.name}} {{browse.browseService.info.trackType}}
    '),e.put("app/browse-music/components/browse-artist.html",'

    {{ browse.browseService.info.title }}

    '),e.put("app/browse-music/components/browse-main.html",'

    {{ list.title }} icon {{ list.title }}

    '),e.put("app/browse-music/components/browse-sources.html",'
    '),e.put("app/browse-music/components/browse.html",'
    '),e.put("app/browse-music/components/music-card.html",'
    {{ item && item.genre ? item.genre : \'\' }}
    {{ item.title ? item.title : item.name }}

    {{ item && item.meta ? item.meta : \'\'}}

    '), e.put("app/browse-music/components/music-item.html",'
    {{item.tracknumber }}.
    {{ item.title ? item.title : item.name || \'\' }}
    {{ item.album }}
    {{ item.artist }}
    {{ browse.timeFormat(item.duration) }}
    '),e.put("app/components/debug/volumio-debug.html",'

    Host


    Player status


    Player buttons


    Volume manager


    Track manager

    Modal


    Toast Messages

    Playlist

    TODO

    Test API


    Logger

    '),e.put("app/components/audio-outputs/audio-outputs.html",'
    cover image
    {{ audioOutputs.audioOutputsService.thisOutput.name }}
    {{ audioOutputs.audioOutputsService.thisOutput.state.artist }} - {{ audioOutputs.audioOutputsService.thisOutput.state.track }}
    cover image
    {{ group.leader.state.artist }} - {{ group.leader.state.track }}
    {{ group.leader.name }}
    {{ output.name }}
    cover image
    {{ output.name }}
    {{ output.state.artist }} - {{ output.state.track }}
    cover image
    {{ audioOutputs.audioOutputsService.thisOutput.name }}
    {{ output.name }}
    cover image
    {{ output.name }}
    '),e.put("app/components/equalizer/equalizer.html",'
    '),e.put("app/components/modals/default-modal.html",''),e.put("app/components/modals/modal-confirm.html",''),e.put("app/components/modals/modal-crypto.html",'
    '),e.put("app/components/modals/modal-custom.html",''),e.put("app/components/modals/modal-gotit.html",''),e.put("app/components/modals/modal-password.html",''),e.put("app/components/modals/modal-progress.html",''),e.put("app/components/modals/modal-updater.html",''),e.put("app/components/on-cloud-actions/on-cloud-actions.html",'
    {{$select.selected.label}}
    '),e.put("app/components/player-logger/player-logger.html",'

    '),e.put("app/components/player-status/player-status.html",'
    {{::key}}: {{::val}}
    '),e.put("app/components/side-menu/side-menu.html",'
  • '),e.put("app/components/track-info-bar/track-info-bar-buttons.html",'
    '),e.put("app/components/track-info-bar/track-info-bar.html",''),e.put("app/components/wait-backend-scrim/wait-backend-scrim.html",'
    '),e.put("app/plugin-manager/elements/installed-plugin.html",'
    {{plugin.prettyName}} {{plugin.version}}
    '),e.put("app/plugin-manager/elements/search-plugin.html",'

    {{plugin.prettyName}}

    {{plugin.description}}

    Author:{{plugin.author}}
    Updated:{{plugin.updated}}
    Version:{{plugin.version}}

    '), e.put("app/plugin-manager/elements/upload-plugin.html",'

    :

    {{pluginManager.uploadPercentage}}%
    '),e.put("app/plugin/components/plugin-component.html",'

    {{pluginComponent.pluginObj.page.label}}

    {{pluginComponent.pluginObj.page.description}}

    {{this.socketService.host}}{{section.label}}

    {{section.description}}

    {{$select.selected.label}}
    {{item.description}}
    '),e.put("app/plugin/core-plugin/firmware-upload-plugin.html",'

    Update firmware via file

    Update system\'s firmware via local firmware file

    '),e.put("app/plugin/core-plugin/my-music-plugin-enabler-plugin.html",'

    {{plugin.prettyName}}
    '),e.put("app/plugin/core-plugin/my-music-plugin.html",'

    {{myMusic.myCollectionStats.artists}}{{myMusic.myCollectionStats.albums}}{{myMusic.myCollectionStats.songs}}{{myMusic.myCollectionStats.playtime}}
    '),e.put("app/plugin/core-plugin/network-drives-plugin.html",'


    {{drive.name}}\\\\{{drive.ip}}\\{{drive.path}} {{drive.size}}
    '),e.put("app/plugin/core-plugin/network-status-plugin.html",'

    {{::network.type}}

    • signal-{{wifi.signal}} {{::network.ssid}}
    • : {{::network.ip}}
    • : {{::network.speed}}
    • :
    '),e.put("app/plugin/core-plugin/system-version-plugin.html",'

    : {{sv.systemVersion.systemversion}} : {{sv.systemVersion.builddate}}

    {{sv.systemVersion.additionalSVInfo}}
    '),e.put("app/plugin/core-plugin/ui-settings-plugin.html",'

    {{uiSettingsPlugin.uploadPercentage}}%

    {{background.name}}
    {{background.name}}


    '),e.put("app/plugin/core-plugin/wifi-plugin.html",'

    signal-{{wifi.signal}} {{::wifiPlugin.wirelessNetworks.connectedTo.ssid}}
    signal-{{wifi.signal}} {{::wifi.ssid}}
     |   
    {{$select.selected.label}}

    '),e.put("app/wizard/partials/wizard-button-bar.html",'
    {{\'WIZARD.STEP\' | translate}} {{wizard.getStepPos()}}
    '),e.put("app/wizard/partials/wizard-navigator.html",'
    '),e.put("app/wizard/views/wizard-advancedsettings.html",'


    {{$select.selected.label}}
    '),e.put("app/wizard/views/wizard-devicecode.html",'

    {{\'WIZARD.DEVICE_CODE_MESSAGE_CLICK\' | translate}} {{\'WIZARD.DEVICE_CODE_VALIDATE\' | translate}}
    {{\'WIZARD.NO_NEED_DEVICE_CODE_MESSAGE\' | translate}}
    {{\'WIZARD.ERROR_ACTIVATING_DEVICE\' | translate}} : {{wizard.wizardDetails.deviceCode.error}}

    {{wizard.wizardDetails.deviceCode.message}}
    '),e.put("app/wizard/views/wizard-done.html",'

    {{wizard.wizardDetails.done.congratulations}}

    {{wizard.wizardDetails.done.title}}

    {{wizard.wizardDetails.done.message}}


    '),e.put("app/wizard/views/wizard-follow.html",'




    '),e.put("app/wizard/views/wizard-language.html",'
    {{header.themeManager.theme}}

    {{$select.selected.language}}
    '),e.put("app/wizard/views/wizard-music.html",'


    {{drive.name}}{{drive.ip}}:{{drive.path}} {{drive.size}}
    '),e.put("app/wizard/views/wizard-name.html",'


    http://{{wizard.wizardDetails.deviceName.name.split(\' \').join(\'-\').toLowerCase()}}.local
    '),e.put("app/wizard/views/wizard-network.html",'

    {{::wifiPlugin.WirelessConnResults.message}}

    {{::wifiPlugin.WirelessConnResults.result}}

    signal-{{wifi.signal}} {{::wifiPlugin.wirelessNetworks.connectedTo.ssid}}
    signal-{{wifi.signal}} {{::wifi.ssid}}
     
    {{$select.selected.label}}

    '), e.put("app/wizard/views/wizard-output.html",'

    {{$select.selected.name}}

    {{$select.selected.name}}
    '),e.put("app/wizard/views/wizard-plugin.html",''),e.put("app/wizard/views/wizard-volumioapps.html",'
    Get it on Google Play
    Get it on App Store
    Get it on Amazon
    '),e.put("app/browse/components/modal/modal-playlist.html",'
    '),e.put("app/browse/components/modal/modal-web-radio.html",'
    '),e.put("app/browse-music/components/modal/modal-credits-details.html",'
    '),e.put("app/components/myvolumio/access/myvolumio-access.html",''),e.put("app/components/myvolumio/cancel-subscription/myvolumio-cancel-subscription.html",'

    : {{myVolumioCancelSubscriptionController.getCurrentPlanName() | uppercase }}

    :

    '),e.put("app/components/myvolumio/edit-profile/myvolumio-edit-profile.html",'


    :{{myVolumioEditProfileController.getUserSubscriptionStatus()}}
    :{{myVolumioEditProfileController.user.plan}} {{\'MYVOLUMIO.\'+myVolumioEditProfileController.getPlanDuration() | uppercase | translate}}
    :{{myVolumioEditProfileController.getSignupDate() | date : \'longDate\'}}
    :{{myVolumioEditProfileController.user.planData.nextPayment.amount}} {{myVolumioEditProfileController.user.planData.nextPayment.currency}} {{myVolumioEditProfileController.user.planData.nextPayment.date | date : \'longDate\'}}
    MyVolumio
    '),e.put("app/components/myvolumio/change-subscription/myvolumio-change-subscription.html",'

    : {{myVolumioChangeSubscriptionController.getCurrentPlanName() | uppercase }}

    :

    '),e.put("app/components/myvolumio/login/myvolumio-login.html",''),e.put("app/components/myvolumio/payment-fail/myvolumio-payment-fail.html",'



    '),e.put("app/components/myvolumio/payment-success/myvolumio-payment-success.html",'

    '),e.put("app/components/myvolumio/plans/myvolumio-plans.html",'


    '),e.put("app/components/myvolumio/profile/myvolumio-profile.html",'

    {{myVolumioProfileController.user.firstName}} {{myVolumioProfileController.user.lastName}}

    {{myVolumioProfileController.user.username}}

    {{myVolumioProfileController.user.email}}

    {{myVolumioProfileController.user.birthday}}
    {{myVolumioProfileController.user.country}}

    {{ \'MYVOLUMIO.WIN_PRIZES_REFERRING_VOLUMIO\' | translate }}

    {{ \'MYVOLUMIO.REFERRING_EXPLANATION\' | translate }}

     

    {{\'MYVOLUMIO.NOT_LOGGED\' | translate}}

    '),e.put("app/components/myvolumio/premium-streaming/myvolumio-premium-streaming.html",'

    {{ MyVolumioPremiumStreamingController.$state.params.serviceName }}

    {{ \'MYVOLUMIO.PREMIUM_STREAMING_TITLE\' | translate }}

    {{ MyVolumioPremiumStreamingController.$state.params.serviceName }} app icon {{ MyVolumioPremiumStreamingController.$state.params.serviceName }} app icon

    {{ \'MYVOLUMIO.PREMIUM_STREAMING_FULLY_INTEGRATED_\' + MyVolumioPremiumStreamingController.$state.params.serviceName.toUpperCase() | translate }}

    {{ \'MYVOLUMIO.PREMIUM_STREAMING_AVAILABILITY_\' + MyVolumioPremiumStreamingController.$state.params.serviceName.toUpperCase() | translate }}

    {{ \'MYVOLUMIO.CONNECT\' | translate }} {{ MyVolumioPremiumStreamingController.$state.params.serviceName }} {{ \'MYVOLUMIO.TO_VOLUMIO\' | translate }}.

    {{ MyVolumioPremiumStreamingController.$state.params.serviceName }} {{ \'MYVOLUMIO.PREMIUM_STREAMING_FEATURE_1\' | translate }}

    • ✔ {{ \'MYVOLUMIO.PREMIUM_STREAMING_FEATURE_2\' | translate }}
    • ✔ {{ \'MYVOLUMIO.ACCESS\' | translate }} {{ MyVolumioPremiumStreamingController.$state.params.serviceName }} {{ \'MYVOLUMIO.PREMIUM_STREAMING_FEATURE_3\' | translate }}
    • ✔ {{ \'MYVOLUMIO.PREMIUM_STREAMING_FEATURE_4\' | translate }}
    '), e.put("app/components/myvolumio/recover-password/myvolumio-recover-password.html",'

    Forgot Password?

    You can reset your password here.

    '),e.put("app/components/myvolumio/referral/myvolumio-referral.html",'

    {{ \'MYVOLUMIO.MY_ACHIEVEMENTS\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_TITLE\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_SUBTITLE\' | translate }}

    {{ \'MYVOLUMIO.MY_ACHIEVEMENTS\' | translate }}

    #{{ myVolumioReferralController.growSurfService.participant.rank }}

    {{ \'MYVOLUMIO.YOUR_RANK\' | translate }}

    {{ myVolumioReferralController.growSurfService.participant.totalReferralsInMonth }}

    {{ \'MYVOLUMIO.REFERRALS_THIS_MONTH\' | translate }}

    {{ myVolumioReferralController.growSurfService.participant.totalReferrals }}

    {{ \'MYVOLUMIO.TOTAL_REFERRALS\' | translate }}

    {{ \'MYVOLUMIO.LEADERBOARD\' | translate }}

    #{{ participant.rank }}
    {{ myVolumioReferralController.user.$id === participant.myVolumioUid ? myVolumioReferralController.user.email : participant.name }}
    {{ \'MYVOLUMIO.REWARDS\' | translate }}

    {{ \'MYVOLUMIO.NUMBER_OF_REFERRALS\' | translate }}
    {{ reward.totalReferralsRequired }}
    {{ reward.description }}
    award
    {{ reward.description }}

    {{ \'MYVOLUMIO.HOW_IT_WORKS\' | translate }}

    badge

    {{ \'MYVOLUMIO.REFERRAL_HOW_TITLE_1\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_HOW_BODY_1\' | translate }}

    badge

    {{ \'MYVOLUMIO.REFERRAL_HOW_TITLE_2\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_HOW_BODY_2\' | translate }}

    badge

    {{ \'MYVOLUMIO.REFERRAL_HOW_TITLE_3\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_HOW_BODY_3\' | translate }}

    {{ \'MYVOLUMIO.FAQ\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_1\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_2\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_3\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_4\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_5\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_6\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_7\' | translate }}

    {{ \'MYVOLUMIO.REFERRAL_FAQ_BODY_8\' | translate }}

    '),e.put("app/components/myvolumio/select-device/myvolumio-cloud-select-device.html",'

    selezionalo
    '),e.put("app/components/myvolumio/signup/myvolumio-signup.html",''),e.put("app/components/myvolumio/signup-new/myvolumio-signup-new.html",'

    {{ \'MYVOLUMIO.GO_PREMIUM\' | translate }}

    {{ \'MYVOLUMIO.MY_VOLUMIO_SHORTDESC\' | translate }}. {{ \'MYVOLUMIO.MY_VOLUMIO_MORE_INFO\' | translate }} 
    '),e.put("app/components/myvolumio/subscribe/myvolumio-subscribe.html",'

    '), e.put("app/components/myvolumio/verify-user/myvolumio-verify-user.html",'

    '),e.put("app/components/myvolumio/templates/terms-and-conditions.html","

    TERMS OF USE

    OVERVIEW

    The websites at volumio.com and volumio.org are operated by Volumio SRL. Throughout the site, the terms “we”, “us”, “our” and “Volumio” refer to Volumio SRL. Volumio offers this website, including all information, software, tools and services available from this site to you, the user, on the condition of your acceptance of all terms, conditions, policies and notices stated here.

    By visiting our websites, by installing, downloading or using Volumio software, by submitting code or other content contributions and/ or purchasing a product or service from us, you engage in our “Services” and agree to be bound by the following terms and conditions (“Terms of Use”). These Terms of Use apply to all users of our websites, software and other products and services, including without limitation users who are browsers, vendors, customers, merchants, and/or contributors of content.

    Please read these Terms of Use carefully before using our Services. By accessing or using any of our Services, you agree to be bound by these Terms of Use. If you do not agree to all the terms and conditions of this agreement, then you may not use any of our Services.

    A breach or violation of any of the Terms of Use will result in an immediate termination of your right to use our Services.

    Any new information, software, features or tools which are added to our Services in time shall also be subject to the Terms of Use. You can review the most current version of the Terms of Use at any time on this page. We reserve the right to update, change or replace any part of these Terms of Use and it is your responsibility to check them periodically for changes. Your continued use of or access to the Services following any changes to the Services constitutes acceptance of those changes.

    PRIVACY AND THIRD PARTY DISCLOSURE

    We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. We may release your information to other parties when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety. Visitor data which does not include personally identifiable information may be provided to other parties for marketing, advertising, or other uses.

    Third party links

    Occasionally, at our discretion, we may post links to third party products or services on our site. These third party sites have separate and independent privacy policies and we have no responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to protect the integrity of our site and welcome any feedback about these third party sites.

    Your consent

    By using our Services, you consent to our privacy policy.

    YOUR VOLUMIO ACCOUNT

    If you create an account on the Website, you are responsible for maintaining the security of your account and you are fully responsible for all activities that occur under that account.

    You must immediately notify us of any unauthorized use of your account or any other breaches of security. Volumio will not be liable for any acts or omissions by you, including any damages of any kind incurred as a result of such acts or omissions.

    ONLINE STORE TERMS

    By agreeing to these Terms of Use, you represent that you are at least the age of majority in your state or country of residence, or that you are the age of majority in your state or country of residence and you have given us your consent to allow any of your minor dependents to use this site.

    You may not use our products for any illegal or unauthorized purpose nor may you, in the use of our Services violate any laws in your jurisdiction (including but not limited to copyright laws).

    ACCURACY, COMPLETENESS AND TIMELINESS OF INFORMATION

    We are not responsible if information made available on this site is not accurate, complete or current. The material on this site is provided for general information only and should not be relied upon or used as the sole basis for making decisions without consulting primary, more accurate, more complete or more timely sources of information. Any reliance on the material on this site is at your own risk.

    PRICES AND AVAILABILITY OF PRODUCTS AND SERVICES

    Prices for our products and services are subject to change without notice.

    We shall not be liable to you or to any third party for any modification, price change, suspension or discontinuation of our products and services.

    We have made every effort to display as accurately as possible the colours and images of the products that appear in our online store. However, we cannot guarantee that your computer monitor’s display of any colour will be accurate.

    We reserve the right to limit the sales of our products or services to any person, geographic region or jurisdiction. We may exercise this right on a case-by-case basis. We reserve the right to limit the quantities of any products or services that we offer. All descriptions of products or product pricing are subject to change at any time without notice, at our sole discretion. Any offer for any product or service made on this site is void in circumstances where such an offer is prohibited.

    ACCURACY OF BILLING AND ACCOUNT INFORMATION

    We reserve the right to refuse any order you place with us. We may, at our sole discretion, limit or cancel quantities purchased per person, per household or per order. These restrictions may include orders placed by or under the same customer account, the same credit card, and/or orders that use the same billing and/or shipping address. In the event that we make a change to or cancel an order, we may attempt to notify you by contacting the e-mail and/or billing address/phone number provided at the time the order was made. We reserve the right to limit or prohibit orders that, in our sole judgement, appear to be placed by dealers, resellers or distributors.

    You agree to provide current, complete and accurate purchase and account information for all purchases made at our store. You agree to promptly update your account and other information, including your email address and credit card numbers and expiration dates, so that we can complete your transactions and contact you as needed.

    TAX AND CUSTOMS

    When making purchases from Volumio, or shipping repairs to or from the customer, additional costs such as sales tax or customs duties may be imposed by local authorities. Such additional costs are the sole responsibility of the customer and not the responsibility of Volumio, nor of the shipping companies. Furthermore, we are unable to predict the applicable amount of duties and local taxes which customers may face because these costs can vary for each country and state. As a consequence, they will not be included in the checkout information or the total price charged by Volumio. Note that any duties and local taxes paid by the customer when making purchases from Volumio are non-refundable by Volumio in the case of a product return.

    OPTIONAL TOOLS

    We may provide you with access to third-party tools which we neither monitor nor have any control or influence over. You acknowledge and agree that we provide access to such tools ”as is” and “as available” without any warranties, representations or conditions of any kind and without any endorsement. We shall have no liability whatsoever arising from or relating to your use of optional third-party tools.

    Any use by you of optional tools offered through the site is entirely at your own risk and discretion and you should ensure that you are familiar with and approve of the terms on which tools are provided by the relevant third-party provider(s).

    THIRD-PARTY LINKS

    Certain content, products and services available via our Service may include materials from third-parties.

    Third-party links on this site may direct you to third-party websites that are not affiliated with us. We are not responsible for examining or evaluating the content or accuracy and we do not warrant and will not have any liability or responsibility for any third-party materials or websites, or for any other materials, products, or services of third parties.

    We are not liable for any harm or damages related to the purchase or use of goods, services, resources, content, or any other transactions made in connection with any third-party websites. Please review carefully the third-party’s policies and practices and make sure you understand them before you engage in any transaction. Complaints, claims, concerns, or questions regarding third-party products should be directed to the third-party.

    RESPONSIBILITY OF CONTRIBUTORS

    If you post content to our websites or otherwise make (or allow any third party to make) material available by means of our websites (“Content”), You are entirely responsible for the content of, and any harm resulting from, that Content. That is the case regardless of whether the Content in question constitutes text, graphics, an audio file, a video file or computer software. By making Content available, you represent and warrant that:

    • The downloading, copying and use of the Content will not infringe any proprietary rights, including but not limited to the copyright, patent, trademark or trade secret rights, of any third party.
    • If your employer has rights to intellectual property you create, you have either (i) received permission from your employer to post or make available the Content, including but not limited to any software, or (ii) secured from your employer a waiver as to all rights in or to the Content.
    • You have fully complied with any third-party licences relating to the Content, and have done all things necessary to successfully pass any required terms through to end users.
    • The Content does not contain or install any viruses, worms, malware, Trojan horses or other harmful or destructive content.
    • The Content is not spam, is not machine- or randomly-generated, and does not contain unethical or unwanted commercial content designed to drive traffic to third party sites or boost the search engine rankings of third party sites, or to further unlawful acts (such as phishing) or mislead recipients as to the source of the material (such as spoofing).
    • The Content is not pornographic, does not contain threats or incite violence, and does not violate the privacy or publicity rights of any third party.
    • Your Content is not named in a manner that misleads your readers into thinking that you are another person or company and you have, in the case of Content that includes computer code, accurately categorized and/or described the type, nature, uses and effects of the materials, whether requested to do so by Volumio or not.

    USER CONTENT LICENSE

    Unless otherwise specified, user contributions are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Code contributions, unless otherwise specified, will be licensed under the General Public License Version 3 and the resulting Intellectual property will belong to Volumio. This will guarantee the independence of the project. Without limiting any of those representations or warranties, Volumio has the right (though not the obligation) to, at Volumio’s sole discretion (i) refuse or remove any content that, in Volumio’s reasonable opinion, violates any Volumio policy or is in any way harmful or objectionable, or (ii) terminate or deny access to and use of the Volumio websites to any individual or entity for any reason, at Volumio’s sole discretion. Volumio will have no obligation to provide a refund of any amounts previously paid.

    RESPONSIBILITY OF WEBSITE VISITORS

    Volumio has not reviewed, and cannot review, all of the material, including computer software, posted to the Website, and cannot therefore be responsible for that material’s content, use or effects. By operating the Website, Volumio does not represent or imply that it endorses the material posted there, or that it believes such material to be accurate, useful or non-harmful. You are responsible for taking precautions as necessary to protect yourself and your computer systems from viruses, worms, Trojan horses, and other harmful or destructive content. The Website may contain content that is offensive, indecent, or otherwise objectionable, as well as content containing technical inaccuracies, typographical mistakes, and other errors. The Website may also contain material that violates the privacy or publicity rights, or infringes the intellectual property and other proprietary rights of third parties, or the downloading, copying or use of which is subject to additional terms and conditions, stated or unstated. Volumio disclaims any responsibility for any harm resulting from the use by visitors of the website, or from any downloading by those visitors of content posted on the website.

    CONTENT POSTED ON OTHER WEBSITES

    We have not reviewed, and cannot review, all of the material, including computer software, made available through the websites and webpages to which Volumio links, and that link to Volumio. Volumio does not have any control over those third-party websites and webpages, and is not responsible for their contents or their use. By linking to a non-Volumio website or webpage, Volumio does not represent or imply that it endorses such website or webpage. You are responsible for taking precautions as necessary to protect yourself and your computer systems from viruses, worms, Trojan horses, and other harmful or destructive content. Volumio disclaims any responsibility for any harm resulting from your use of non-Volumio websites and webpages.

    COPYRIGHT INFRINGEMENT AND DMCA POLICY

    As Volumio asks others to respect its intellectual property rights, it respects the intellectual property rights of others. If you believe that material located on or linked to by Volumio violates your copyright, and if this website resides in the USA, you are encouraged to notify Volumio in accordance with Volumio’s Digital Millennium Copyright Act (“DMCA”) Policy. Volumio will respond to all such notices, including as required or appropriate by removing the infringing material or disabling all links to the infringing material. Volumio will terminate a visitor’s access to and use of the Website if, under appropriate circumstances, the visitor is determined to be a repeat infringer of the copyrights or other intellectual property rights of Volumio or others. In the case of such termination, Volumio will have no obligation to provide a refund of any amounts previously paid to Volumio.

    INTELLECTUAL PROPERTY

    This Agreement does not transfer from Volumio to you any Volumio or third party intellectual property, and all right, title and interest in and to such property will remain (as between the parties) solely with Volumio. Volumio, Volumio SRL, the Volumio logo, and all other trademarks, service marks, graphics and logos used in connection with Volumio, or the Website are trademarks or registered trademarks of Volumio or Volumio’s licensors. Other trademarks, service marks, graphics and logos used in connection with the Website may be the trademarks of other third parties. Your use of the Website grants you no right or license to reproduce or otherwise use any Volumio or third-party trademarks.

    CHANGES

    Volumio reserves the right, at its sole discretion, to modify or replace any part of this Agreement. It is your responsibility to check this Agreement periodically for changes. Your continued use of or access to the Website following the posting of any changes to this Agreement constitutes acceptance of those changes. Volumio may also, in the future, offer new services and/or features through the Website (including, the release of new tools and resources). Such new features and/or services shall be subject to the terms and conditions of this Agreement.

    TERMINATION

    Volumio may terminate your access to all or any part of the Website at any time, with or without cause, with or without notice, effective immediately. If you wish to terminate this Agreement or your Volumio account (if you have one), you may simply discontinue using the Website. All provisions of this Agreement which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

    DISCLAIMER OF WARRANTIES

    The Website is provided “as is”. Volumio and its suppliers and licensors hereby disclaim all warranties of any kind, express or implied, including, without limitation, the warranties of merchantability, fitness for a particular purpose and non-infringement. Neither Volumio nor its suppliers and licensors, makes any warranty that the Website will be error free or that cess thereto will be continuous or uninterrupted. You understand that you download from, or otherwise obtain content or services through, the Website at your own discretion and risk.

    LIMITATION OF LIABILITY

    In no event will Volumio, or its suppliers or licensors, be liable with respect to any subject matter of this agreement under any contract, negligence, strict liability or other legal or equitable theory for: (i) any special, incidental or consequential damages; (ii) the cost of procurement for substitute products or services; (iii) for interruption of use or loss or corruption of data; or (iv) for any amounts that exceed the fees paid by you to Volumio under this agreement during the twelve (12) month period prior to the cause of action. Volumio shall have no liability for any failure or delay due to matters beyond their reasonable control. The foregoing shall not apply to the extent prohibited by applicable law.

    GENERAL REPRESENTATION AND WARRANTY

    You represent and warrant that (i) your use of the Website will be in strict accordance with the Volumio Privacy Policy with this Agreement and with all applicable laws and regulations (including without limitation any local laws or regulations in your country, state, city, or other governmental area, regarding online conduct and acceptable content, and including all applicable laws regarding the transmission of technical data exported from the country in which this website resides or the country in which you reside) and (ii) your use of the Website will not infringe or misappropriate the intellectual property rights of any third party.

    INDEMNIFICATION

    You agree to indemnify and hold harmless Volumio, its contractors, and its licensors, and their respective directors, officers, employees and agents from and against any and all claims and expenses, including attorneys’ fees, arising out of your use of the Website, including but not limited to your violation of this Agreement.

    MISCELLANEOUS

    This Agreement constitutes the entire agreement between Volumio and you concerning the subject matter hereof, and they may only be modified by a written amendment signed by an authorized executive of Volumio, or by the posting by Volumio of a revised version. Except to the extent applicable law, if any, provides otherwise, this Agreement, any access to or use of the Website will be governed by the laws of Italian, excluding its conflict of law provisions, and the proper venue for any disputes arising out of or relating to any of the same will be the courts localed in Italy. The arbitration shall take place in a court located in Italy, in the Italian language and the arbitral decision may be enforced in any court. The prevailing party in any action or proceeding to enforce this Agreement shall be entitled to costs and attorneys’ fees. If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the parties’ original intent, and the remaining portions will remain in full force and effect. A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms and conditions; Volumio may assign its rights under this Agreement without condition. This Agreement will be binding upon and will inure to the benefit of the parties, their successors and permitted assigns. If we decide to change our Terms of Use, we will post those changes on this page.

    TRADEMARK INFORMATION

    Volumio and the Volumio logo are registered trademarks of Michelangelo Guarise and licensed to Volumio SRL, a company registered in Italy (VAT ID: IT07009020483).

    You may only use the Volumio trademark to:

    1. Describe a genuine Volumio product or service;
    2. To state that another product is compatible with or can be used with a Volumio product or service.

    Unless you have our explicit written authorization, you may not:

    1. use the Volumio trademark as part of your company name, company logo, product name, service name or the domain name for your website;
    2. use the Volumio trademark to claim that your product, service or website is endorsed or associated with Volumio or Volumio products and services;
    3. manufacture, sell or give away any items of merchandise with Volumio marks;
    4. resell the Volumio product bundled with any ‘addons’, legal or illegal;
    5. modify disk images (if you are a reseller). You must use official disk images from this website with no changes and the SD card cannot be ‘booted’ for testing.
    6. use the Volumio trademark or a name or logo which are similar to them in a way that will damage our brand or reputation;

    Additional guidelines:

    Any use of the Volumio trademark must be accompanied by the text “Volumio is a registered trademark of Volumio SRL”.

    VOLUMIO PRODUCTS RETURN POLICY

    Returns (refunds):

    • Obtain a return authorization from Volumio by contacting us at https://volumio.com/en/contact/
    • Returns must be requested within 30 days of the date of delivery of the item being returned.
    • After authorization of the return has been given, send the item back to us at the following address:
      Volumio Srl
      Borgo Albizi 15
      50122 Firenze
      ITALY
      support@volumio.org
    • Returned items must be returned in the original packaging.
    • Please indicate in the shipping documents that the shipment is a “Customer return”, when possible to do so.
    • Returned items must be undamaged and complete with no visible signs of wear or use.
    • Fill in the form at https://volumio.com/en/rma-return-process-page/ with the tracking number of your shipment.
    • Any brokerage fees, customs fees, duties or taxes paid by the customer, as well as any return shipping charges, will not be refunded.

    Warranty repair returns for Volumio Primo (first version, discontinued in 2022):

    • Obtain a warranty repair authorization from Volumio by contacting us at https://volumio.com/en/contact/
    • After authorization of the repair, send the item back to us at the following address:
      Zenith SAS
      Via Machiavelli 48
      00185 Rome
      ITALY
      Phone: +39 3482688018
    • Items must be returned in the original packaging or other packaging offering equal or better protection.
    • Please indicate in the shipping documents that the shipment is “For warranty repair”, when possible to do so.
    • Fill in the form at https://volumio.com/en/rma-return-process-page/ with the tracking number of your shipment.
    • The cost of shipping an item to you which was repaired under warranty will be covered by Volumio. Any other costs such as brokerage fees, customs fees, duties or taxes paid by the customer when receiving the returned item, or any shipping charges or other costs incurred by the customer when shipping the item to Volumio will be the sole responsibility of the customer.
    • Any problems related to the incorrect use of the device or following the unauthorized opening or modification of the device will not be covered by the Volumio warranty. In such cases, the customer may opt to either: i) pay for the return shipping costs of the unrepaired item, or ii) pay for an out-of-warranty repair and return shipping.

    Warranty repair returns for Volumio Primo (second version, released in 2022):

    • Obtain a warranty repair authorization from Volumio by contacting us at https://volumio.com/en/contact/
    • After authorization of the repair, send the item back to us at the following address:
      Volumio Srl
      Borgo Albizi 15
      50122 Firenze
      ITALY
      support@volumio.org
    • Items must be returned in the original packaging or other packaging offering equal or better protection.
    • Please indicate in the shipping documents that the shipment is “For warranty repair”, when possible to do so.
    • Fill in the form at https://volumio.com/en/rma-return-process-page/ with the tracking number of your shipment.
    • The cost of shipping an item to you which was repaired under warranty will be covered by Volumio. Any other costs such as brokerage fees, customs fees, duties or taxes paid by the customer when receiving the returned item, or any shipping charges or other costs incurred by the customer when shipping the item to Volumio will be the sole responsibility of the customer.
    • Any problems related to the incorrect use of the device or following the unauthorized opening or modification of the device will not be covered by the Volumio warranty. In such cases, the customer may opt to either: i) pay for the return shipping costs of the unrepaired item, or ii) pay for an out-of-warranty repair and return shipping.

    Out-of-warranty repair returns for Volumio Primo (first version, discontinued in 2022):

    • Obtain a repair authorization from Volumio by contacting us at https://volumio.com/en/contact/
    • After authorization of the repair, send the item back to us at the following address:
      Zenith SAS
      Via Machiavelli 48
      00185 Rome
      ITALY
      Phone: +39 3482688018
    • Please return the item in the original packaging or other packaging offering equal or better protection.
    • Please indicate in the shipping documents that the shipment is “For repair”, when possible to do so.
    • Fill in the form at https://volumio.com/en/rma-return-process-page/ with the tracking number of your shipment.
    • Once we have received the item and evaluated the cost of the repair, we will provide a quotation for the cost of the repair and the return shipping.
    • If you choose not to proceed with the repair, we will return the unrepaired item to you at your own cost.
    • Note that any other costs such as brokerage fees, customs fees, duties or taxes paid by the customer when receiving the returned item, or any shipping charges or other costs incurred by the customer when shipping the item to Volumio will be the sole responsibility of the customer.

    EULA

    End-User License Agreement for Volumio software.

    This End-User License Agreement (EULA) is a legal agreement between you (either an individual or a single entity) and Volumio for the Volumio software products, which include computer software and may include associated media, printed materials, and “online” or electronic documentation (“SOFTWARE PRODUCT”).

    By downloading, installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA.

    If you do not agree to the terms of this EULA, do not download, install or otherwise use the SOFTWARE PRODUCT.

    Commercial Use

    Volumio software may not be sold, bundled, installed or included with other products, or otherwise distributed, by any third parties as part of any commercial activity or enterprise except in accordance with our Commercial Partnership Programme. Please contact us for more information about how to join this programme.

    Software Product License

    You may use, distribute and copy Volumio Open Source Components under the terms of GNU General Public License version 3.

    No warranties

    Volumio expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation is provided “as is” without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or noninfringement. The entire risk arising out of the use of the SOFTWARE PRODUCT remains with you.

    No liability for damages

    In no event shall Volumio be liable for any special, consequential, incidental or indirect damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if Volumio is aware of the possibility of such damages and known defects.

    MYVOLUMIO TERMS AND CONDITIONS

    These Terms and Conditions (“Terms”, “Terms and Conditions”) govern your relationship with MyVolumio mobile application (the “Service”) operated by Volumio (“us”, “we”, or “our”).

    Please read these Terms and Conditions carefully before using our MyVolumio mobile application (the “Service”).

    Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who access or use the Service.

    By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service.

    Goal of MyVolumio

    Provide an enhanced experience with Volumio, by allowing control of several Volumio devices from a single dashboard

    Provide an infrastructure to easily expand compatibility with third party music services.

    Data Collection and usage

    Due to the nature of the services and the features that we offer, we store (in a very secure manner) some of your data, specifically:

    • Name, surname, email and geographical location
    • Favourites, Playlists, Radio Favourites, Personal Radios and the last played song on each device
    • Date and time of your first subscription
    • Data pertaining to your devices: anonymized Unique Identifier, hardware type, friendly name, system version and date of first addition.
    • Source used and for how much time

    What is your data used for:

    • Matching the nearest server to your location to enhance your experience with the lowest possible latency
    • Real-time synchronization of Favourites, Playlists, Radio Favourites, Personal Radios
    • Verification that you have an active subscription
    • Offering a clear overview of how many devices are linked to your account and if they are currently available and what they are currently playing

    General Policy of User Data

    • By cancelling your account, your data will instantly be permanently deleted
    • We will not sell, share or grant access to your data to anyone.
    • You will be able to receive a file containing all your aforementioned data (except those that might result in a security issue) by sending an email to support at volumio.org

    Subscriptions

    Some parts of the Service are billed on a subscription basis (“Subscription(s)”). You will be billed in advance on a recurring and periodic basis (“Billing Cycle”). Billing cycles are set either on a monthly or annual basis, depending on the type of subscription plan you select when purchasing a Subscription.

    At the end of each Billing Cycle, your Subscription will automatically renew under the exact same conditions unless you cancel it or Volumio cancels it. You may cancel your Subscription renewal either through your online account management page or by contacting Volumio customer support team.

    A valid payment method, including credit card or PayPal, is required to process the payment for your Subscription. You shall provide Volumio with accurate and complete billing information including full name, address, state, zip code, telephone number, and a valid payment method information. By submitting such payment information, you automatically authorize Volumio to charge all Subscription fees incurred through your account to any such payment instruments.

    Should automatic billing fail to occur for any reason, Volumio will issue an electronic invoice indicating that you must proceed manually, within a certain deadline date, with the full payment corresponding to the billing period as indicated on the invoice.

    Free Trial

    Volumio may, at its sole discretion, offer a Subscription with a free trial for a limited period of time (“Free Trial”).

    You may be required to enter your billing information in order to sign up for the Free Trial.

    If you do enter your billing information when signing up for the Free Trial, you will not be charged by Volumio until the Free Trial has expired. On the last day of the Free Trial period, unless you cancelled your Subscription, you will be automatically charged the applicable Subscription fees for the type of Subscription you have selected.

    At any time and without notice, Volumio reserves the right to (i) modify the terms and conditions of the Free Trial offer, or (ii) cancel such Free Trial offer.

    Order Processing

    Our order process is conducted by our online reseller Paddle.com. Paddle.com is the Merchant of Record for all our orders. Paddle provides all customer service inquiries and handles returns.

    Fee Changes

    Volumio, in its sole discretion and at any time, may modify the Subscription fees for the Subscriptions. Any Subscription fee change will become effective at the end of the then-current Billing Cycle.

    Volumio will provide you with a reasonable prior notice of any change in Subscription fees to give you an opportunity to terminate your Subscription before such change becomes effective.

    Your continued use of the Service after the Subscription fee change comes into effect constitutes your agreement to pay the modified Subscription fee amount.

    Refunds

    The User Consumer who, for whatever reason, is not satisfied with the Product has the right to withdraw from the contract without penalty and without specifying the reason.

    The right of withdrawal must be exercised at least 1 day before the renewal date of your subscription plan (monthly or annual).

    You can cancel your subscription at any time by going to your account at myvolumio.org and changing your current plan to FREE.

    If the withdrawal notice is not done within this period, your subscription will be automatically renewed according to your billing plan.

    We do not offer refunds after 14 days from the free trial.

    We do not offer refunds for annual plans.

    We do not offer refunds for monthly plans.

    We do not offer refunds for renewal payments.

    You can check the status of your subscription and all the payments due for the renewal of your subscription from your profile on your MyVolumio account.

    There are no partial refunds of your subscription, whether you are on a monthly plan or an annual plan.

    In case of purchase of a digital product, the Consumer User acknowledges and agrees to lose the right to withdrawal if the execution or download of the digital product started with his express agreement and with the acceptance of losing the right to withdrawal after the execution or download has begun.

    The Consumer User acknowledges and accepts that the withdrawal from a subscription does not entail the return of the amounts paid for the Products already used or supplied.

    Content

    Our Service allows you to post, link, store, share and otherwise make available certain information, text, graphics, videos, or other material (“Content”). You are responsible for the Content that you post to the Service, including its legality, reliability, and appropriateness.

    By posting Content to the Service, you grant us the right and license to use, modify, perform, display, reproduce, and distribute such Content on and through the Service. You retain any and all of your rights to any Content you submit, post or display on or through the Service and you are responsible for protecting those rights.

    You represent and warrant that: (i) the Content is yours (you own it) or you have the right to use it and grant us the rights and license as provided in these Terms, and (ii) the posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights or any other rights of any person.

    Accounts

    When you create an account with us, you must provide us information that is accurate, complete, and current at all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of your account on our Service.

    You are responsible for safeguarding the password that you use to access the Service and for any activities or actions under your password, whether your password is with our Service or a third-party service.

    You agree not to disclose your password to any third party. You must notify us immediately upon becoming aware of any breach of security or unauthorized use of your account.

    You may not use as a username the name of another person or entity or that is not lawfully available for use, a name or trade mark that is subject to any rights of another person or entity other than you without appropriate authorization, or a name that is otherwise offensive, vulgar or obscene.

    Intellectual Property

    The Service and its original content (excluding Content provided by users), features and functionality are and will remain the exclusive property of Volumio and its licensors. The Service is protected by copyright, trademark, and other laws of both the Italy and foreign countries. Our trademarks and trade dress may not be used in connection with any product or service without the prior written consent of Volumio.

    Links To Other Web Sites

    Our Service may contain links to third-party web sites or services that are not owned or controlled by Volumio.

    Volumio has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that Volumio shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services.

    We strongly advise you to read the terms and conditions and privacy policies of any third-party web sites or services that you visit.

    Termination

    We may terminate or suspend your account immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms.

    Upon termination, your right to use the Service will immediately cease. If you wish to terminate your account, you may simply discontinue using the Service.

    Limitation Of Liability

    In no event shall Volumio, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (i) your access to or use of or inability to access or use the Service; (ii) any conduct or content of any third party on the Service; (iii) any content obtained from the Service; and (iv) unauthorized access, use or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.

    Disclaimer

    Your use of the Service is at your sole risk. The Service is provided on an “AS IS” and “AS AVAILABLE” basis. The Service is provided without warranties of any kind, whether express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of performance.

    Volumio its subsidiaries, affiliates, and its licensors do not warrant that a) the Service will function uninterrupted, secure or available at any particular time or location; b) any errors or defects will be corrected; c) the Service is free of viruses or other harmful components; or d) the results of using the Service will meet your requirements.

    Governing Law

    These Terms shall be governed and construed in accordance with the laws of Italy, without regard to its conflict of law provisions.

    Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service, and supersede and replace any prior agreements we might have between us regarding the Service.

    "), e.put("app/components/myvolumio/welcome/myvolumio-welcome.html",'

    {{ \'MYVOLUMIO.MY_VOLUMIO\' | translate }}

    {{ \'MYVOLUMIO.WELCOME\' | translate }}!

    {{ \'MYVOLUMIO.LANDING_REFERRAL_WELCOME_TEXT1\' | translate }}

    {{ \'MYVOLUMIO.LANDING_REFERRAL_WELCOME_TEXT2\' | translate }}

    {{ \'MYVOLUMIO.ITS_FREE\' | translate }}

    {{ \'MYVOLUMIO.LANDING_WHAT_IS_MYVOLUMIO\' | translate }}

    {{ \'MYVOLUMIO.LANDING_SHORT_INTRO\' | translate }}

    badge

    {{ \'PLUGINS.INSTALL\' | translate }}

    {{ \'MYVOLUMIO.LANDING_INSTALL_TEXT\' | translate }}

    {{ \'MYVOLUMIO.MORE_INFO\' | translate }}
    badge

    {{ \'NETWORK.CONNECT\' | translate }}

    {{ \'MYVOLUMIO.LANDING_CONNECT_TEXT\' | translate }}

    badge

    {{ \'MYVOLUMIO.CONTROL\' | translate }}

    {{ \'MYVOLUMIO.LANDING_CONTROL_TEXT\' | translate }}

    {{ \'MYVOLUMIO.LANDING_FEATURES_TITLE\' | translate }}

    {{ \'MYVOLUMIO.LANDING_FEATURES_TEXT\' | translate }}

    {{ \'MYVOLUMIO.LANDING_FEATURE_INTEGRATIONS_TITLE\' | translate }}

    {{ \'MYVOLUMIO.LANDING_FEATURE_INTEGRATIONS_TEXT\' | translate }}

    integrations icons

    {{ \'MYVOLUMIO.LANDING_FEATURE_DISCOVERY_TITLE\' | translate }}

    {{ \'MYVOLUMIO.LANDING_FEATURE_DISCOVERY_TEXT\' | translate }}

    Volumio music player user interface

    {{ \'MYVOLUMIO.LANDING_FEATURE_BACKUP_TITLE\' | translate }}

    {{ \'MYVOLUMIO.LANDING_FEATURE_BACKUP_TEXT\' | translate }}

    devices: a smartphone, laptop and a tablet with the volumios user interface

    {{ \'MYVOLUMIO.LANDING_FEATURE_CD_TITLE\' | translate }}

    {{ \'MYVOLUMIO.LANDING_FEATURE_CD_TEXT\' | translate }}

    stack of CDs
    '),e.put("app/components/side-menu/elements/modal-alarm-clock.html",''),e.put("app/components/side-menu/elements/modal-karaoke.html",''),e.put("app/components/side-menu/elements/modal-power-off.html",''),e.put("app/components/side-menu/elements/modal-sleep.html",''),e.put("app/components/track-manager/elements/track-manager-button-bar.html",' '),e.put("app/plugin-manager/components/modals/modal-plugin-installer.html",''),e.put("app/plugin/core-plugin/elements/network-drives-add-edit-drive.html",'
    {{share.name}}
    {{$select.selected}}
    '),e.put("app/plugin/core-plugin/elements/network-drives-plugin-accordion.html",'

    {{heading}}

    '),e.put("app/plugin/core-plugin/modals/modal-network-drive-password.html",''),e.put("app/themes/volumio/browse/volumio-browse.html",'
    '),e.put("app/themes/volumio/browse-music/volumio-browse-music.html",'
    '),e.put("app/themes/volumio/header/volumio-header.html",'
    {{$select.selected.label}}
    '),e.put("app/themes/volumio/layout/volumio-layout.html",'
    '),e.put("app/themes/volumio/footer/volumio-footer.html",'
    '),e.put("app/themes/volumio/partials/volumio-tab-bar.html",'
    '),e.put("app/themes/volumio/play-queue/volumio-play-queue.html",'
      '),e.put("app/themes/volumio/playback/volumio-playback.html",'
      '),e.put("app/themes/volumio3/browse/volumio3-browse.html",'
      '),e.put("app/themes/volumio3/footer/volumio3-footer.html",''),e.put("app/themes/volumio3/browse-music/volumio3-browse-music.html",'
      '), e.put("app/themes/volumio3/home/volumio3-home.html",'

      Discover all your best music and streams

      '),e.put("app/themes/volumio3/header/volumio3-header.html",""),e.put("app/themes/volumio3/play-queue/volumio3-play-queue.html",'
        '),e.put("app/themes/volumio3/layout/volumio3-layout.html",'
        '),e.put("app/themes/volumio3/partials/volumio3-playback-tab-bar.html",'
        '),e.put("app/themes/volumio3/partials/volumio3-tab-bar.html",'
        '),e.put("app/themes/volumio3/playback/volumio3-playback.html",''),e.put("app/themes/volumio3/settings/volumio3-settings.html",'
        '),e.put("app/components/myvolumio/components/device-selector/device-selector.html",'
        {{device.name}}{{device.device}}
        '),e.put("app/components/myvolumio/components/paddle-pay-button/paddle-pay-button.html",'
        '),e.put("app/components/myvolumio/components/card/myvolumio-card.html",'
        {{ myVolumioUserCardController.user.firstName }}
        {{ myVolumioUserCardController.user.plan || \'Free\' }}
        Arrow right
        {{ \'MYVOLUMIO.SUPPORT_MYVOLUMIO_SHORT\' | translate }}
        MyVolumio avatar image
        {{ \'MYVOLUMIO.MY_VOLUMIO\' | translate }}
        {{ \'MYVOLUMIO.NOT_CONNECTED\' | translate }}
        Arrow right
        {{ \'MYVOLUMIO.MORE_INFO\' | translate }}
        Info
        {{ \'MYVOLUMIO.MORE_INFO_DESCRIPTION\' | translate }}
        '),e.put("app/components/myvolumio/components/stripe-pay-button/stripe-pay-button.html",''),e.put("app/components/myvolumio/modals/myvolumio-paying-modal/myvolumio-paying-modal.html",'
        '),e.put("app/components/myvolumio/modals/auth-paying-modal/auth-paying-modal.html",'
        '),e.put("app/components/myvolumio/modals/myvolumio-terms-modal/myvolumio-terms-modal.html",'
        '),e.put("app/components/track-manager/components/modals/modal-track-manager-actions.html",''),e.put("app/themes/volumio/assets/static-pages/credits.html",'

        Credits


        Copyright 2013-2024 Michelangelo Guarise

        Made with ♥ in Italy, brought to awesomeness by contributors all around the world

        Support Volumio

        Do you like Volumio? Help us make it better with a small contribution on Patreon!

        Volumio2

        body-parser by N/A - MIT - git+https://github.com/expressjs/body-parser.git
        cache-manager by N/A - MIT - git+https://github.com/jaredwray/cache-manager.git
        compare-versions by Ole Michelsen - MIT - git+https://github.com/omichelsen/compare-versions.git
        compression by N/A - MIT - git+https://github.com/expressjs/compression.git
        connect-busboy by Brian White - undefined - git+ssh://git@github.com/mscdex/connect-busboy.git
        cue-parser by Xiao Han - MIT - git+https://github.com/justlaputa/cue-parser.git
        daap-parser by Robert Lange - MIT - git+https://github.com/roblan/daap-parser.git
        dotenv by N/A - BSD-2-Clause - git://github.com/motdotla/dotenv.git
        ejs by Matthew Eernisse(http://fleegix.org) - Apache-2.0 - git://github.com/mde/ejs.git
        express by TJ Holowaychuk - MIT - git+https://github.com/expressjs/express.git
        fast.js by Charles Pick - MIT - http://github.com/codemix/fast.js
        firebase by Firebase - Apache-2.0 - git+https://github.com/firebase/firebase-js-sdk.git
        fs-extra by JP Richardson - MIT - git+https://github.com/jprichardson/node-fs-extra.git
        hashmap by Ariel Flesler - MIT - git://github.com/flesler/hashmap.git
        html-entities by Marat Dulin - MIT - git+https://github.com/mdevils/html-entities.git
        inotify by Camilo Aguilar - MIT - git+ssh://git@github.com/c4milo/node-inotify.git
        inquirer by Simon Boudrias - MIT - git+https://github.com/SBoudrias/Inquirer.js.git
        jimp by Oliver Moran - MIT - git+https://github.com/jimp-dev/jimp.git
        kew by N/A - Apache-2.0 - git+https://github.com/Medium/kew.git
        libxmljs by N/A - MIT - git+ssh://git@github.com/libxmljs/libxmljs.git
        linux-mountutils by Matt White - MIT - git+https://github.com/mw-white/node-linux-mountutils.git
        mdns by David Siegel - undefined - git+ssh://git@github.com/agnat/node_mdns.git
        modclean by Kyle Ross - MIT - https://github.com/ModClean/modclean/tree/3.0.0-dev
        moment by Iskren Ivov Chernev - MIT - git+https://github.com/moment/moment.git
        mqtt by N/A - MIT - git://github.com/mqttjs/MQTT.js.git
        music-metadata by Borewit - MIT - git+https://github.com/borewit/music-metadata.git
        node-cache by mpneuried - MIT - git://github.com/node-cache/node-cache.git
        node-schedule by Matt Patenaude - MIT - git+https://github.com/node-schedule/node-schedule.git
        node-ssdp by Ilya Shaisultanov - MIT - git+ssh://git@github.com/diversario/node-ssdp.git
        node-tunein-radio by Sergio Visinoni - ISC - git+https://github.com/piffio/node-tunein-radio.git
        node-uuid by Robert Kieffer - undefined - git+https://github.com/broofa/node-uuid.git
        onoff by fivdi - MIT - git+https://github.com/fivdi/onoff.git
        require-from-string by Vsevolod Strukchinsky - MIT - git+https://github.com/floatdrop/require-from-string.git
        socket.io by N/A - MIT - git://github.com/socketio/socket.io.git
        socket.io-client by N/A - MIT - git+https://github.com/socketio/socket.io-client.git
        string by JP Richardson - MIT - git+https://github.com/jprichardson/string.js.git
        tail by Luca Grulla - MIT - git://github.com/lucagrulla/node-tail.git
        timsort by Marco Ziccardi - MIT - git+https://github.com/mziccard/node-timsort.git
        udev by Henri Tuhola - BSD-2-Clause - git+https://github.com/cheery/node-udev.git
        underscore by Jeremy Ashkenas - MIT - git://github.com/jashkenas/underscore.git
        unirest by Mashape - MIT - git+ssh://git@github.com/Mashape/unirest-nodejs.git
        v-conf by Massimiliano Fanciulli - GPLV3 - git+https://github.com/volumio/v-conf.git
        winston by Charlie Robbins - MIT - git+https://github.com/winstonjs/winston.git
        xmlbuilder by Ozgur Ozcitak - MIT - git://github.com/oozcitak/xmlbuilder-js.git
        yargs by N/A - MIT - git+https://github.com/yargs/yargs.git
        @prantlf/jsonlint by Ferdinand Prantl - MIT - git+https://github.com/prantlf/jsonlint.git
        lint-staged by Andrey Okonetchnikov - MIT - git+https://github.com/okonet/lint-staged.git
        mocha by TJ Holowaychuk - MIT - git+https://github.com/mochajs/mocha.git
        semistandard by Feross Aboukhadijeh - MIT - git+https://github.com/standard/semistandard.git

        Volumio2 Contributors

        volumio 2245 Commits
        fanciulli 387 Commits
        greenkeeperio-bot 185 Commits
        mtieltjes 93 Commits
        balbuze 85 Commits
        xipmix 75 Commits
        Ghembs 51 Commits
        crieke 22 Commits
        ashthespy 22 Commits
        apinner 19 Commits
        macmpi 16 Commits
        gilphilbert 15 Commits
        jomo 15 Commits
        HoochDeveloper 14 Commits
        Jotam 10 Commits
        piffio 9 Commits
        mpasteur 8 Commits
        liberatorcnx 8 Commits
        LeonCB 7 Commits
        shawaj 5 Commits
        falu 5 Commits
        Callenberg 4 Commits
        howardqiao 4 Commits
        taudac 4 Commits
        opiokane 4 Commits
        majko96 4 Commits
        Saiyato 4 Commits
        jo-me 3 Commits
        stranskj 3 Commits

        Volumio2-UI

        compare-versions by Ole Michelsen - MIT - git+https://github.com/omichelsen/compare-versions.git
        fs-extra by JP Richardson - MIT - git+https://github.com/jprichardson/node-fs-extra.git
        babel-core by Sebastian McKenzie - MIT - https://github.com/babel/babel/tree/master/packages/babel-core
        babel-loader by Luis Couto- MIT - https://github.com/babel/babel-loader.git
        babel-polyfill by Sebastian McKenzie - MIT - https://github.com/babel/babel/tree/master/packages/babel-polyfill
        browser-sync by Shane Osbourne - Apache-2.0 - git+https://github.com/BrowserSync/browser-sync.git
        browser-sync-spa by shakyshane - ISC - https://github.com/shakyShane/browser-sync-spa
        chalk by N/A - MIT - git+https://github.com/chalk/chalk.git
        concat-stream by Max Ogden - MIT - git+ssh://git@github.com/maxogden/concat-stream.git
        del by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/del.git
        gulp by Gulp Team - MIT - git+https://github.com/gulpjs/gulp.git
        gulp-angular-templatecache by Mickel - MIT - git+https://github.com/miickel/gulp-angular-templatecache.git
        gulp-angular-translate-extract by Ben - MIT - git+https://github.com/bcabanes/gulp-angular-translate-extract.git
        gulp-autoprefixer by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-autoprefixer.git
        gulp-csso by Ben Briggs - MIT - git+https://github.com/ben-eb/gulp-csso.git
        gulp-filter by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-filter.git
        gulp-flatten by Artem Medeusheyev - MIT - git://github.com/armed/gulp-flatten.git
        gulp-if by Rob Richardson - MIT - git://github.com/robrich/gulp-if.git
        gulp-inject by Joakim Carlstein - MIT - git+https://github.com/klei/gulp-inject.git
        gulp-jshint by N/A - MIT - git://github.com/spalger/gulp-jshint.git
        gulp-load-plugins by Jack Franklin - MIT - https://github.com/jackfranklin/gulp-load-plugins.git
        gulp-minify-html by N/A - MIT - #
        gulp-ng-annotate by Kagami Hiiragi - CC0-1.0 - git+https://github.com/Kagami/gulp-ng-annotate.git
        gulp-ng-config by Atticus White - MIT - git+https://github.com/ajwhite/gulp-ng-config.git
        gulp-ng-constant by Arturo Guzman - MIT - git://github.com/guzart/gulp-ng-constant.git
        gulp-protractor by Steffen Müller - MIT - git://github.com/mllrsohn/gulp-protractor.git
        gulp-rename by Hector Guillermo Parra Alvarez - MIT - git://github.com/hparra/gulp-rename.git
        gulp-replace by Larry Davis - MIT - git://github.com/lazd/gulp-replace.git
        gulp-rev by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-rev.git
        gulp-rev-replace by James K Nelson - MIT - git+https://github.com/jamesknelson/gulp-rev-replace.git
        gulp-sass by David Manning - MIT - git+https://github.com/dlmanning/gulp-sass.git
        gulp-size by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-size.git
        gulp-sourcemaps by Florian Reiterer - ISC - git://github.com/gulp-sourcemaps/gulp-sourcemaps.git
        gulp-uglify by Terin Stock - MIT - git+https://github.com/terinjokes/gulp-uglify.git
        gulp-useref by Jonathan Kemp - MIT - git+https://github.com/jonkemp/gulp-useref.git
        gulp-util by Fractal - MIT - git+https://github.com/gulpjs/gulp-util.git
        gulp-webpack by Kyle Robinson Young - MIT - https://github.com/shama/gulp-webpack
        http-proxy-middleware by Steven Chim - MIT - git+https://github.com/chimurai/http-proxy-middleware.git
        jshint-loader by Tobias Koppers @sokra - undefined - git+ssh://git@github.com/webpack/jshint-loader.git
        jshint-stylish by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/jshint-stylish.git
        karma by Vojta Jína - MIT - git://github.com/karma-runner/karma.git
        karma-jasmine by Vojta Jina - MIT - git://github.com/karma-runner/karma-jasmine.git
        karma-ng-html2js-preprocessor by Vojta Jina - MIT - git://github.com/karma-runner/karma-ng-html2js-preprocessor.git
        karma-phantomjs-launcher by Vojta Jina - MIT - git://github.com/karma-runner/karma-phantomjs-launcher.git
        lodash by John-David Dalton - MIT - git+https://github.com/lodash/lodash.git
        main-bower-files by Christopher Knötschke - MIT - git://github.com/ck86/main-bower-files.git
        map-stream by Dominic Tarr - MIT - git://github.com/dominictarr/map-stream.git
        merge-stream by Stephen Sugden - MIT - git+https://github.com/grncdr/merge-stream.git
        npm by GitHub Inc. - Artistic-2.0 - git+https://github.com/npm/cli.git
        request by Mikeal Rogers - Apache-2.0 - git+https://github.com/request/request.git
        require-dir by Aseem Kishore - MIT - git://github.com/aseemk/requireDir.git
        uglify-save-license by Shinnosuke Watanabe - undefined - https://github.com/shinnn/uglify-save-license.git
        wiredep by Stephen Sawchuk - MIT - git+https://github.com/taptapship/wiredep.git
        wrench by Ryan McGrath - undefined - git+https://ryanmcgrath@github.com/ryanmcgrath/wrench-js.git
        angular by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-animate by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-sanitize by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-cookies by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-touch by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-bootstrap by https://github.com/angular-ui/bootstrap/graphs/contributors - MIT - git+https://github.com/angular-ui/bootstrap.git
        angular-bootstrap-slider by Kyle Kemp - MIT - git+https://github.com/seiyria/angular-bootstrap-slider.git
        angular-bootstrap-switch by Francesco Pontillo - Apache-2.0 - git+ssh://git@github.com/frapontillo/angular-bootstrap-switch.git
        angular-knob by probalazs - MIT - git+https://github.com/docnetwork/angular-knob.git
        angular-toastr by Jesus Rodriguez - MIT - git+https://github.com/Foxandxss/angular-toastr.git
        angular-ui-router by N/A - MIT - git+https://github.com/angular-ui/ui-router.git
        angular-ui-select by http://github.com/angular-ui/ui-select/graphs/contributors - MIT - git://github.com/angular-ui/ui-select.git
        animate.css by Animate.css - MIT - git+https://github.com/animate-css/animate.css.git
        bootstrap-sass-officialcomponents-font-awesome by N/A - CC-BY-4.0,MIT,OFL-1.1 - git://github.com/components/font-awesome.git
        jquery by OpenJS Foundation and other contributors - MIT - git+https://github.com/jquery/jquery.git
        moment by Iskren Ivov Chernev - MIT - git+https://github.com/moment/moment.git
        socket.io by N/A - MIT - git://github.com/socketio/socket.io.git
        ui-router-extras by Christopher Thielen - MIT -
        matchmedia-ng by Jason Kulatunga - MIT - git://github.com/AnalogJ/matchmedia-ng.git
        AngularHammerngDraggableng-file-upload by danial.farid@gmail.com - MIT - git+https://github.com/danialfarid/ng-file-upload.git
        angular-translate by Pascal Precht - MIT - git+ssh://git@github.com/angular-translate/angular-translate.git
        angular-translate-loader-static-files by Pascal Precht - MIT - git+https://github.com/angular-translate/bower-angular-translate-loader-static-files.git
        angularfire by Firebase - MIT - git+https://github.com/firebase/angularfire.git
        angular-local-storage by grevory - MIT - git+https://github.com/grevory/angular-local-storage.git
        angular-stripe-checkout by Tobyn Baugher - MIT - git+https://github.com/tobyn/angular-stripe-checkout.git
        ng-letter-avatar by Felipe Céspedes - MIT - git+https://github.com/username/repo.git
        angular-country-selectangularjs-datepicker by Filippo Oretti - MIT - git+https://github.com/720kb/angular-datepicker.git
        angular-mailchimp-subscribeangular-loading-bar by Wes Cruver - MIT - git://github.com/chieffancypants/angular-loading-bar.git
        angular-mocks by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git

        Volumio2-UI Contributors

        volumio 1180 Commits
        kurtommy 381 Commits
        jackie-d 131 Commits
        apinner 63 Commits
        balbuze 51 Commits
        bencehusi 36 Commits
        crieke 33 Commits
        abrarmahmood 23 Commits
        gtriggiano 11 Commits
        chris-rudmin 9 Commits
        mervinderuiter 9 Commits
        Tristenax 8 Commits
        LeonCB 7 Commits
        Jotam 6 Commits
        falu 6 Commits
        ashthespy 5 Commits
        EdwinAbalain 4 Commits
        xipmix 4 Commits
        nosferatujr 4 Commits
        gh201 4 Commits
        ArturNadolski 3 Commits
        crisp00 3 Commits
        FishTest 3 Commits
        howardqiao 2 Commits
        jomo 2 Commits
        vovtz 2 Commits
        TonyVpck 2 Commits
        uvce14 2 Commits
        mpasteur 2 Commits
        mundodisco8 2 Commits

        Volumio OS Contributors

        volumio 1023 Commits
        macmpi 126 Commits
        xipmix 27 Commits
        150balbes 20 Commits
        balbuze 10 Commits
        ashthespy 9 Commits
        Ghembs 8 Commits
        pkendall64 6 Commits
        aldot 4 Commits
        nikkov 4 Commits
        gvolt 4 Commits
        earlchew 3 Commits
        miero 3 Commits
        chrismade 3 Commits
        mikelangeloz 3 Commits
        Granjow 2 Commits
        PeterDaveHello 2 Commits
        bcornec 1 Commits
        Starbix 1 Commits
        Domin6 1 Commits
        howardqiao 1 Commits
        Wraul 1 Commits
        thegass 1 Commits
        Saiyato 1 Commits
        ce3a 1 Commits
        piffio 1 Commits
        cdu13a 1 Commits
        cron410 1 Commits
        sparkysbc 1 Commits

        Frameworks

        Node.js by Ryan Dahl
        AngularJS by Google
        Bootstrap by Twitter
        Socket.io by Guillermo Rauch

        Core Packages

        MPD - Music Player Daemon by Max Kellermann
        Shairport-Sync by Mike Brady
        UPMPDCLI by Justin Maggard

        Backgrounds

        Galaxy by ESA/Hubble
        Darkness by Jarred Decker
        Aurora by Alfrfrey
        Morning by Justin Thomas
        Stars by Andrew King
        Yosemite by Wasim Muklashy
        Berlin by Fabrizio Nisi
        Cymatic by Mordechai Braunstein
        Jazzfest by Edmund Zuber
        MyVinyl by Gianluca Bocci
        Borealis by Chong Wei
        Aurora by Maud Bocquillod
        Nightsky by Federico Beccari

        Services

        Shoutcast Web Radio API by Shoutcast

        Translations

        French translation by Balbuze
        Dutch translation by Dennis Hagens
        Japanese translation by ycat3
        German translation by ChristianFink & Christopher Rieke
        Polish translation by zbeegniev
        Danish translation by tomatpasser
        Catalan translation by Josep Saez
        Chinese translation by FishTest
        Swedish translation by Magnus kjez
        Portuguese translation by gvasco
        Finnish translation by pgustafs
        Hungarian translation by falu
        Russian translation by dimas.sky & Pavel Bukhta
        Ukranian translation by solaar1974
        Norwegian translation by geirhell
        Greek translation by xela
        Korean translation by Justin Lee & club706
        Czech translation by stranskj
        Slovensky translation by olej-a
        Turkish translation by Ajiba
        Croatian translation by Vlado64

        Graphic Design

        Sources Icons by Tommaso Greco

        License

        This Program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation either version 3, or (at your option) any later version. This Program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Volumio; see the file COPYING. If not, see http://www.gnu.org/licenses

        Volumio OEM

        White label solutionVolumio name and logo can be used for commercial purposes only with an explicit authorization. Contact us for details.However, Volumio offers a white label solution which does not have Volumio branding. Also, such solutions can be finely tailored to fir any particular need. This has already been proved effective for various Audio Manufactures, enabling them to offer Volumios ease of use, excellent audio quality and reliability, but at a fraction of the cost of in-house development.This also benefits our project financially, which allows us to invest more resources in the project and constantly increse its quality.

        We are able to offer the following:


        • Custom UI branding
        • Custom UI Backend features
        • Removal or addition of new features, based on specific scenarios
        • Consultancy on Hardware and software solution for specific scenarios
        • A very convenient pricing model


        Although you could make these changes yourself, letting us take care of it will guarantee:

        • Support for the whole products lifecycle
        • Tested, loved and proven solution by a huge community
        • All system updates, with your branding and functions preserved on each update


        • You should note that Volumio is licensed under the GPL and as such any changes to the source code made must be made available to anyone requesting them. We can offer also licence exceptions, if your business model needs it. If you are interested in this service, you can contact us for a quote.

        Legal Disclaimer

        Copyright © 2013-2024 Michelangelo GuariseWe are not responsible for any damage to your computer or appliances caused by Volumio. Use it by your own risk.Intellectual propertyThis Agreement does not transfer from Volumio SRL to you any Volumio SRL or third party intellectual property, and all right, title and interest in and to such propertywill remain (as between the parties) solely with Volumio SRL. Volumio SRL, Volumio, the Volumio logo, and all other trademarks, service marks, graphics and logos usedin connection with Volumio, or the Website are trademarks or registered trademarks of Volumio SRL or Volumio SRL’s licensors. Other trademarks, service marks, graphics in connection with Volumio, or the Website are trademarks or registered trademarks of Volumio SRL or Volumio SRL’s licensors. Other trademarks, service marks, graphicsin connection with Volumio, or the Website are trademarks or registered trademarks of Volumio SRL or Volumio SRL’s licensors. Other trademarks, service marks, graphics and logos used in connection with the Website may be the trademarks of other third parties. Your use of the Website grants you no right or license to reproduce or otherwise use any Volumio SRLor third-party trademarks.EULAEnd-User License Agreement
        This End-User License Agreement (EULA) is a legal agreement between you (either an individual or a single entity) and the author of this Software for the software product identified above,which includes computer software and may include associated media, printed materials, and “online” or electronic documentation.By installing, copying, or otherwise using this software, you agree to be bounded by the terms of this EULA.If you do not agree to the terms of this EULA, do not install or use this software
        SOFTWARE PRODUCT LICENSEYou may use, distribute and copy Volumio under the terms of GNU General Public License version 3 which you should have received with this software.NO WARRANTIES.
        The Author of this Software expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation is provided “as is” without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or noninfringement. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you.NO LIABILITY FOR DAMAGES.In no event shall the author of this Software be liable for any special, consequential, incidental or indirect damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if the Author of this Software is aware of the possibility of such damages and known defects.Volumio uses several trademarks from different projects. Their rights are not overruled by our license and stay intact.

        All trademarks, copyrights and other forms of intellectual property belong to their respective owners.Linux is a registered trademark of Linus Torvalds in the U.S. and other countries.Spotify is a registered trademark of Spotify AB.Airplay is a registered trademark of Apple Inc.Direct-Stream Digital (DSD) is a registered trademark of Sony Corporation and Philips AG.

        FOSS


        Volumio Sources
        Volumio Backend code: https://github.com/volumio/Volumio2.git
        Volumio UI code: https://github.com/volumio/Volumio2-UI
        Package Sources: https://github.com/volumio/debian-sources
        Image Builder: https://github.com/volumio/Build
        Non-standard Packages
        MPD https://github.com/volumio/volumio-mpd
        Shairport-Sync https://github.com/volumio/shairport-sync
        Shairport-Sync reader https://github.com/volumio/shairport-sync-reader
        Snapcast https://github.com/volumio/snapcast
        RTL8732BU https://github.com/volumio/rtl8723bu
        UPMPDCLI https://github.com/volumio/upmpdcli
        hostapd-rtl8188 https://github.com/volumio/hostapd-rtl8188
        DjMount https://github.com/volumio/djmount
        Kernel Sources
        PI https://github.com/volumio/raspberrypi-linux - Platform Files (refer to commit in /boot/.firmware_revision_kernel)
        Sparky https://github.com/volumio/Linux-Sparky - Platform Files
        BBB https://github.com/volumio/linux-beagleboard-botic - Platform Files
        UDOO https://github.com/volumio/linux-UDOO - Platform Files
        X86 https://github.com/volumio/linux-x86 - Platform Files
        Pine64 https://github.com/volumio/linux-pine64 - Platform Files
        Open Source Licenses
        GNU General Public License v2.0
        GNU General Public License v3.0
        GNU Library General Public License v2.0
        GNU Library General Public License v2.1
        GNU Library General Public License v3.0
        Mozilla Public License 2.0
        Apache v2.0
        MIT
        BSD-3-Clause
        Written Offer
        If you would like a copy of the GPL v2.0 source code contained in this product shipped on a DVD, you may obtain the complete Corresponding Source code from us for a period of three years after our last shipment of this product for a charge of 20$ no more than the cost of preparing and mailing a DVD to you. Please contact foss@volumio.org . This offer is valid to anyone in receipt of this information.

        '), e.put("app/themes/volumio/components/modals/modal-ripper.html",''),e.put("app/themes/volumio/components/multi-room-dock/volumio-multi-room-dock.html",'

        Multiroom devices

        {{device.name}}
        {{device.state.artist}}
        {{device.state.track}}
        '),e.put("app/themes/volumio/components/add-track-to-playlist-btn/volumio-add-track-to-playlist-btn.html",''),e.put("app/themes/volumio/components/favourite-track-btn/volumio-favourite-track-btn.html",''),e.put("app/themes/volumio/components/player-buttons/volumio-player-buttons.html",'
        '),e.put("app/themes/volumio/components/track-info/volumio-track-info.html",'
        {{trackInfo.playerService.state.album}}

        {{trackInfo.playerService.state.title}}

        {{trackInfo.playerService.state.artist}}
        {{trackInfo.playerService.state.album}}
        '),e.put("app/themes/volumio/components/track-actions-btn/volumio-track-actions-btn.html",''),e.put("app/themes/volumio/components/volume-manager/volumio-volume-manager.html",'
        {{volumeManager.playerService.volume}}
        /100
        {{volumeManager.playerService.volume}}
        /100
        '),e.put("app/themes/volumio/components/track-manager/volumio-track-manager.html",'
        {{trackManager.playerService.state.album}}

        {{trackManager.playerService.state.title}}

        {{trackManager.playerService.state.artist}}
        {{trackManager.playerService.state.samplerate}} | {{trackManager.playerService.state.bitdepth}} {{trackManager.playerService.state.bitrate}}
        {{trackManager.playerService.elapsedTimeString}}
        {{trackManager.playerService.state.trackType}}
        {{trackManager.playerService.songLength}}
        {{trackManager.playerService.state.fileFormat.name}} {{trackManager.playerService.state.trackType}}
        '),e.put("app/themes/volumio3/components/favourite-track-btn/volumio3-favourite-track-btn.html",''),e.put("app/themes/volumio3/assets/static-pages/credits.html",'

        Credits


        Copyright 2013-2024 Michelangelo Guarise

        Made with ♥ in Italy, brought to awesomeness by contributors all around the world

        Volumio2

        body-parser by N/A - MIT - git+https://github.com/expressjs/body-parser.git
        cache-manager by N/A - MIT - git+https://github.com/jaredwray/cache-manager.git
        compare-versions by Ole Michelsen - MIT - git+https://github.com/omichelsen/compare-versions.git
        compression by N/A - MIT - git+https://github.com/expressjs/compression.git
        connect-busboy by Brian White - undefined - git+ssh://git@github.com/mscdex/connect-busboy.git
        cue-parser by Xiao Han - MIT - git+https://github.com/justlaputa/cue-parser.git
        daap-parser by Robert Lange - MIT - git+https://github.com/roblan/daap-parser.git
        dotenv by N/A - BSD-2-Clause - git://github.com/motdotla/dotenv.git
        ejs by Matthew Eernisse(http://fleegix.org) - Apache-2.0 - git://github.com/mde/ejs.git
        express by TJ Holowaychuk - MIT - git+https://github.com/expressjs/express.git
        fast.js by Charles Pick - MIT - http://github.com/codemix/fast.js
        firebasefs-extra by JP Richardson - MIT - git+https://github.com/jprichardson/node-fs-extra.git
        hashmap by Ariel Flesler - MIT - git://github.com/flesler/hashmap.git
        html-entities by Marat Dulin - MIT - git+https://github.com/mdevils/html-entities.git
        inotify by Camilo Aguilar - MIT - git+ssh://git@github.com/c4milo/node-inotify.git
        inquirer by Simon Boudrias - MIT - git+https://github.com/SBoudrias/Inquirer.js.git
        jimpkew by N/A - Apache-2.0 - git+https://github.com/Medium/kew.git
        libxmljs by N/A - MIT - git+ssh://git@github.com/libxmljs/libxmljs.git
        linux-mountutils by Matt White - MIT - git+https://github.com/mw-white/node-linux-mountutils.git
        mdns by David Siegel - undefined - git+ssh://git@github.com/agnat/node_mdns.git
        modclean by Kyle Ross - MIT - https://github.com/ModClean/modclean/tree/3.0.0-dev
        moment by Iskren Ivov Chernev - MIT - git+https://github.com/moment/moment.git
        mqtt by N/A - MIT - git://github.com/mqttjs/MQTT.js.git
        music-metadatanode-cache by mpneuried - MIT - git://github.com/node-cache/node-cache.git
        node-schedule by Matt Patenaude - MIT - git+https://github.com/node-schedule/node-schedule.git
        node-ssdp by Ilya Shaisultanov - MIT - git+ssh://git@github.com/diversario/node-ssdp.git
        node-tunein-radio by Sergio Visinoni - ISC - git+https://github.com/piffio/node-tunein-radio.git
        node-uuid by Robert Kieffer - undefined - git+https://github.com/broofa/node-uuid.git
        onoff by fivdi - MIT - git+https://github.com/fivdi/onoff.git
        require-from-string by Vsevolod Strukchinsky - MIT - git+https://github.com/floatdrop/require-from-string.git
        socket.io by N/A - MIT - git://github.com/socketio/socket.io.git
        socket.io-client by N/A - MIT - git+https://github.com/socketio/socket.io-client.git
        string by JP Richardson - MIT - git+https://github.com/jprichardson/string.js.git
        tail by Luca Grulla - MIT - git://github.com/lucagrulla/node-tail.git
        timsort by Marco Ziccardi - MIT - git+https://github.com/mziccard/node-timsort.git
        udev by Henri Tuhola - BSD-2-Clause - git+https://github.com/cheery/node-udev.git
        underscore by Jeremy Ashkenas - MIT - git://github.com/jashkenas/underscore.git
        unirest by Mashape - MIT - git+ssh://git@github.com/Mashape/unirest-nodejs.git
        v-conf by Massimiliano Fanciulli - GPLV3 - git+https://github.com/volumio/v-conf.git
        winston by Charlie Robbins - MIT - git+https://github.com/winstonjs/winston.git
        xmlbuilder by Ozgur Ozcitak - MIT - git://github.com/oozcitak/xmlbuilder-js.git
        yargs by N/A - MIT - git+https://github.com/yargs/yargs.git
        @prantlf/jsonlint by Ferdinand Prantl - MIT - git+https://github.com/prantlf/jsonlint.git
        lint-stagedmochasemistandard by Feross Aboukhadijeh - MIT - git+https://github.com/standard/semistandard.git

        Volumio2 Contributors

        volumio 2245 Commits
        fanciulli 387 Commits
        greenkeeperio-bot 185 Commits
        mtieltjes 93 Commits
        balbuze 85 Commits
        xipmix 75 Commits
        Ghembs 51 Commits
        crieke 22 Commits
        ashthespy 22 Commits
        apinner 19 Commits
        macmpi 16 Commits
        gilphilbert 15 Commits
        jomo 15 Commits
        HoochDeveloper 14 Commits
        Jotam 10 Commits
        piffio 9 Commits
        mpasteur 8 Commits
        liberatorcnx 8 Commits
        LeonCB 7 Commits
        shawaj 5 Commits
        falu 5 Commits
        Callenberg 4 Commits
        howardqiao 4 Commits
        taudac 4 Commits
        opiokane 4 Commits
        majko96 4 Commits
        Saiyato 4 Commits
        jo-me 3 Commits
        stranskj 3 Commits

        Volumio2-UI

        compare-versions by Ole Michelsen - MIT - git+https://github.com/omichelsen/compare-versions.git
        fs-extra by JP Richardson - MIT - git+https://github.com/jprichardson/node-fs-extra.git
        babel-core by Sebastian McKenzie - MIT - https://github.com/babel/babel/tree/master/packages/babel-core
        babel-loader by Luis Couto- MIT - https://github.com/babel/babel-loader.git
        babel-polyfill by Sebastian McKenzie - MIT - https://github.com/babel/babel/tree/master/packages/babel-polyfill
        browser-sync by Shane Osbourne - Apache-2.0 - git+https://github.com/BrowserSync/browser-sync.git
        browser-sync-spa by shakyshane - ISC - https://github.com/shakyShane/browser-sync-spa
        chalk by N/A - MIT - git+https://github.com/chalk/chalk.git
        concat-stream by Max Ogden - MIT - git+ssh://git@github.com/maxogden/concat-stream.git
        del by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/del.git
        gulp by Gulp Team - MIT - git+https://github.com/gulpjs/gulp.git
        gulp-angular-templatecache by Mickel - MIT - git+https://github.com/miickel/gulp-angular-templatecache.git
        gulp-angular-translate-extract by Ben - MIT - git+https://github.com/bcabanes/gulp-angular-translate-extract.git
        gulp-autoprefixer by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-autoprefixer.git
        gulp-csso by Ben Briggs - MIT - git+https://github.com/ben-eb/gulp-csso.git
        gulp-filter by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-filter.git
        gulp-flatten by Artem Medeusheyev - MIT - git://github.com/armed/gulp-flatten.git
        gulp-if by Rob Richardson - MIT - git://github.com/robrich/gulp-if.git
        gulp-inject by Joakim Carlstein - MIT - git+https://github.com/klei/gulp-inject.git
        gulp-jshint by N/A - MIT - git://github.com/spalger/gulp-jshint.git
        gulp-load-plugins by Jack Franklin - MIT - https://github.com/jackfranklin/gulp-load-plugins.git
        gulp-minify-html by N/A - MIT - #
        gulp-ng-annotate by Kagami Hiiragi - CC0-1.0 - git+https://github.com/Kagami/gulp-ng-annotate.git
        gulp-ng-config by Atticus White - MIT - git+https://github.com/ajwhite/gulp-ng-config.git
        gulp-ng-constant by Arturo Guzman - MIT - git://github.com/guzart/gulp-ng-constant.git
        gulp-protractor by Steffen Müller - MIT - git://github.com/mllrsohn/gulp-protractor.git
        gulp-rename by Hector Guillermo Parra Alvarez - MIT - git://github.com/hparra/gulp-rename.git
        gulp-replace by Larry Davis - MIT - git://github.com/lazd/gulp-replace.git
        gulp-rev by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-rev.git
        gulp-rev-replace by James K Nelson - MIT - git+https://github.com/jamesknelson/gulp-rev-replace.git
        gulp-sass by David Manning - MIT - git+https://github.com/dlmanning/gulp-sass.git
        gulp-size by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/gulp-size.git
        gulp-sourcemaps by Florian Reiterer - ISC - git://github.com/gulp-sourcemaps/gulp-sourcemaps.git
        gulp-uglify by Terin Stock - MIT - git+https://github.com/terinjokes/gulp-uglify.git
        gulp-useref by Jonathan Kemp - MIT - git+https://github.com/jonkemp/gulp-useref.git
        gulp-util by Fractal - MIT - git+https://github.com/gulpjs/gulp-util.git
        gulp-webpack by Kyle Robinson Young - MIT - https://github.com/shama/gulp-webpack
        http-proxy-middleware by Steven Chim - MIT - git+https://github.com/chimurai/http-proxy-middleware.git
        jshint-loader by Tobias Koppers @sokra - undefined - git+ssh://git@github.com/webpack/jshint-loader.git
        jshint-stylish by Sindre Sorhus - MIT - git+https://github.com/sindresorhus/jshint-stylish.git
        karmakarma-jasmine by Vojta Jina - MIT - git://github.com/karma-runner/karma-jasmine.git
        karma-ng-html2js-preprocessor by Vojta Jina - MIT - git://github.com/karma-runner/karma-ng-html2js-preprocessor.git
        karma-phantomjs-launcher by Vojta Jina - MIT - git://github.com/karma-runner/karma-phantomjs-launcher.git
        lodash by John-David Dalton - MIT - git+https://github.com/lodash/lodash.git
        main-bower-files by Christopher Knötschke - MIT - git://github.com/ck86/main-bower-files.git
        map-stream by Dominic Tarr - MIT - git://github.com/dominictarr/map-stream.git
        merge-stream by Stephen Sugden - MIT - git+https://github.com/grncdr/merge-stream.git
        npmrequest by Mikeal Rogers - Apache-2.0 - git+https://github.com/request/request.git
        require-dir by Aseem Kishore - MIT - git://github.com/aseemk/requireDir.git
        uglify-save-license by Shinnosuke Watanabe - undefined - https://github.com/shinnn/uglify-save-license.git
        wiredep by Stephen Sawchuk - MIT - git+https://github.com/taptapship/wiredep.git
        wrench by Ryan McGrath - undefined - git+https://ryanmcgrath@github.com/ryanmcgrath/wrench-js.git
        angular by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-animate by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-sanitize by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-cookies by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-touch by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git
        angular-bootstrap by https://github.com/angular-ui/bootstrap/graphs/contributors - MIT - git+https://github.com/angular-ui/bootstrap.git
        angular-bootstrap-slider by Kyle Kemp - MIT - git+https://github.com/seiyria/angular-bootstrap-slider.git
        angular-bootstrap-switch by Francesco Pontillo - Apache-2.0 - git+ssh://git@github.com/frapontillo/angular-bootstrap-switch.git
        angular-knob by probalazs - MIT - git+https://github.com/docnetwork/angular-knob.git
        angular-toastr by Jesus Rodriguez - MIT - git+https://github.com/Foxandxss/angular-toastr.git
        angular-ui-router by N/A - MIT - git+https://github.com/angular-ui/ui-router.git
        angular-ui-select by http://github.com/angular-ui/ui-select/graphs/contributors - MIT - git://github.com/angular-ui/ui-select.git
        animate.css by Animate.css - MIT - git+https://github.com/animate-css/animate.css.git
        bootstrap-sass-officialcomponents-font-awesome by N/A - CC-BY-4.0,MIT,OFL-1.1 - git://github.com/components/font-awesome.git
        jquery by OpenJS Foundation and other contributors - MIT - git+https://github.com/jquery/jquery.git
        moment by Iskren Ivov Chernev - MIT - git+https://github.com/moment/moment.git
        socket.io by N/A - MIT - git://github.com/socketio/socket.io.git
        ui-router-extras by Christopher Thielen - MIT -
        matchmedia-ng by Jason Kulatunga - MIT - git://github.com/AnalogJ/matchmedia-ng.git
        AngularHammerngDraggableng-file-upload by danial.farid@gmail.com - MIT - git+https://github.com/danialfarid/ng-file-upload.git
        angular-translate by Pascal Precht - MIT - git+ssh://git@github.com/angular-translate/angular-translate.git
        angular-translate-loader-static-files by Pascal Precht - MIT - git+https://github.com/angular-translate/bower-angular-translate-loader-static-files.git
        angularfire by Firebase - MIT - git+https://github.com/firebase/angularfire.git
        angular-local-storage by grevory - MIT - git+https://github.com/grevory/angular-local-storage.git
        angular-stripe-checkout by Tobyn Baugher - MIT - git+https://github.com/tobyn/angular-stripe-checkout.git
        ng-letter-avatar by Felipe Céspedes - MIT - git+https://github.com/username/repo.git
        angular-country-selectangularjs-datepicker by Filippo Oretti - MIT - git+https://github.com/720kb/angular-datepicker.git
        angular-mailchimp-subscribeangular-loading-bar by Wes Cruver - MIT - git://github.com/chieffancypants/angular-loading-bar.git
        angular-mocks by Angular Core Team - MIT - git+https://github.com/angular/angular.js.git

        Volumio2-UI Contributors

        volumio 1180 Commits
        kurtommy 381 Commits
        jackie-d 131 Commits
        apinner 63 Commits
        balbuze 51 Commits
        bencehusi 36 Commits
        crieke 33 Commits
        abrarmahmood 23 Commits
        gtriggiano 11 Commits
        chris-rudmin 9 Commits
        mervinderuiter 9 Commits
        Tristenax 8 Commits
        LeonCB 7 Commits
        Jotam 6 Commits
        falu 6 Commits
        ashthespy 5 Commits
        EdwinAbalain 4 Commits
        xipmix 4 Commits
        nosferatujr 4 Commits
        gh201 4 Commits
        ArturNadolski 3 Commits
        crisp00 3 Commits
        FishTest 3 Commits
        howardqiao 2 Commits
        jomo 2 Commits
        vovtz 2 Commits
        TonyVpck 2 Commits
        uvce14 2 Commits
        mpasteur 2 Commits
        mundodisco8 2 Commits

        Volumio OS Contributors

        volumio 1023 Commits
        macmpi 126 Commits
        xipmix 27 Commits
        150balbes 20 Commits
        balbuze 10 Commits
        ashthespy 9 Commits
        Ghembs 8 Commits
        pkendall64 6 Commits
        aldot 4 Commits
        nikkov 4 Commits
        gvolt 4 Commits
        earlchew 3 Commits
        miero 3 Commits
        chrismade 3 Commits
        mikelangeloz 3 Commits
        Granjow 2 Commits
        PeterDaveHello 2 Commits
        bcornec 1 Commits
        Starbix 1 Commits
        Domin6 1 Commits
        howardqiao 1 Commits
        Wraul 1 Commits
        thegass 1 Commits
        Saiyato 1 Commits
        ce3a 1 Commits
        piffio 1 Commits
        cdu13a 1 Commits
        cron410 1 Commits
        sparkysbc 1 Commits

        Frameworks

        Node.js by Ryan Dahl
        AngularJS by Google
        Bootstrap by Twitter
        Socket.io by Guillermo Rauch

        Core Packages

        MPD - Music Player Daemon by Max Kellermann
        Shairport-Sync by Mike Brady
        UPMPDCLI by Justin Maggard

        Backgrounds

        Galaxy by ESA/Hubble
        Darkness by Jarred Decker
        Aurora by Alfrfrey
        Morning by Justin Thomas
        Stars by Andrew King
        Yosemite by Wasim Muklashy
        Berlin by Fabrizio Nisi
        Cymatic by Mordechai Braunstein
        Jazzfest by Edmund Zuber
        MyVinyl by Gianluca Bocci
        Borealis by Chong Wei
        Aurora by Maud Bocquillod
        Nightsky by Federico Beccari

        Services

        Shoutcast Web Radio API by Shoutcast

        Translations

        French translation by Balbuze
        Dutch translation by Dennis Hagens
        Japanese translation by ycat3
        German translation by ChristianFink & Christopher Rieke
        Polish translation by zbeegniev
        Danish translation by tomatpasser
        Catalan translation by Josep Saez
        Chinese translation by FishTest
        Swedish translation by Magnus kjez
        Portuguese translation by gvasco
        Finnish translation by pgustafs
        Hungarian translation by falu
        Russian translation by dimas.sky & Pavel Bukhta
        Ukranian translation by solaar1974
        Norwegian translation by geirhell
        Greek translation by xela
        Korean translation by Justin Lee & club706
        Czech translation by stranskj
        Slovensky translation by olej-a
        Turkish translation by Ajiba
        Croatian translation by Vlado64

        Graphic Design

        Sources Icons by Tommaso Greco

        License

        This Program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation either version 3, or (at your option) any later version. This Program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Volumio; see the file COPYING. If not, see http://www.gnu.org/licenses

        Volumio OEM

        White label solutionVolumio name and logo can be used for commercial purposes only with an explicit authorization. Contact us for details.However, Volumio offers a white label solution which does not have Volumio branding. Also, such solutions can be finely tailored to fir any particular need. This has already been proved effective for various Audio Manufactures, enabling them to offer Volumios ease of use, excellent audio quality and reliability, but at a fraction of the cost of in-house development.This also benefits our project financially, which allows us to invest more resources in the project and constantly increse its quality.

        We are able to offer the following:


        • Custom UI branding
        • Custom UI Backend features
        • Removal or addition of new features, based on specific scenarios
        • Consultancy on Hardware and software solution for specific scenarios
        • A very convenient pricing model


        Although you could make these changes yourself, letting us take care of it will guarantee:

        • Support for the whole products lifecycle
        • Tested, loved and proven solution by a huge community
        • All system updates, with your branding and functions preserved on each update


        • You should note that Volumio is licensed under the GPL and as such any changes to the source code made must be made available to anyone requesting them. We can offer also licence exceptions, if your business model needs it. If you are interested in this service, you can contact us for a quote.

        Legal Disclaimer

        Copyright © 2013-2024 Michelangelo GuariseWe are not responsible for any damage to your computer or appliances caused by Volumio. Use it by your own risk.Intellectual propertyThis Agreement does not transfer from Volumio SRL to you any Volumio SRL or third party intellectual property, and all right, title and interest in and to such propertywill remain (as between the parties) solely with Volumio SRL. Volumio SRL, Volumio, the Volumio logo, and all other trademarks, service marks, graphics and logos usedin connection with Volumio, or the Website are trademarks or registered trademarks of Volumio SRL or Volumio SRL’s licensors. Other trademarks, service marks, graphics in connection with Volumio, or the Website are trademarks or registered trademarks of Volumio SRL or Volumio SRL’s licensors. Other trademarks, service marks, graphicsin connection with Volumio, or the Website are trademarks or registered trademarks of Volumio SRL or Volumio SRL’s licensors. Other trademarks, service marks, graphics and logos used in connection with the Website may be the trademarks of other third parties. Your use of the Website grants you no right or license to reproduce or otherwise use any Volumio SRLor third-party trademarks.EULAEnd-User License Agreement
        This End-User License Agreement (EULA) is a legal agreement between you (either an individual or a single entity) and the author of this Software for the software product identified above,which includes computer software and may include associated media, printed materials, and “online” or electronic documentation.By installing, copying, or otherwise using this software, you agree to be bounded by the terms of this EULA.If you do not agree to the terms of this EULA, do not install or use this software
        SOFTWARE PRODUCT LICENSEYou may use, distribute and copy Volumio under the terms of GNU General Public License version 3 which you should have received with this software.NO WARRANTIES.
        The Author of this Software expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation is provided “as is” without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or noninfringement. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you.NO LIABILITY FOR DAMAGES.In no event shall the author of this Software be liable for any special, consequential, incidental or indirect damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if the Author of this Software is aware of the possibility of such damages and known defects.Volumio uses several trademarks from different projects. Their rights are not overruled by our license and stay intact.

        All trademarks, copyrights and other forms of intellectual property belong to their respective owners.Linux is a registered trademark of Linus Torvalds in the U.S. and other countries.Spotify is a registered trademark of Spotify AB.Airplay is a registered trademark of Apple Inc.Direct-Stream Digital (DSD) is a registered trademark of Sony Corporation and Philips AG.

        FOSS


        Volumio Sources
        Volumio Backend code: https://github.com/volumio/Volumio2.git
        Volumio UI code: https://github.com/volumio/Volumio2-UI
        Package Sources: https://github.com/volumio/debian-sources
        Image Builder: https://github.com/volumio/Build
        Non-standard Packages
        MPD https://github.com/volumio/volumio-mpd
        Shairport-Sync https://github.com/volumio/shairport-sync
        Shairport-Sync reader https://github.com/volumio/shairport-sync-reader
        Snapcast https://github.com/volumio/snapcast
        RTL8732BU https://github.com/volumio/rtl8723bu
        UPMPDCLI https://github.com/volumio/upmpdcli
        hostapd-rtl8188 https://github.com/volumio/hostapd-rtl8188
        DjMount https://github.com/volumio/djmount
        Kernel Sources
        PI https://github.com/volumio/raspberrypi-linux - Platform Files (refer to commit in /boot/.firmware_revision_kernel)
        Sparky https://github.com/volumio/Linux-Sparky - Platform Files
        BBB https://github.com/volumio/linux-beagleboard-botic - Platform Files
        UDOO https://github.com/volumio/linux-UDOO - Platform Files
        X86 https://github.com/volumio/linux-x86 - Platform Files
        Pine64 https://github.com/volumio/linux-pine64 - Platform Files
        Open Source Licenses
        GNU General Public License v2.0
        GNU General Public License v3.0
        GNU Library General Public License v2.0
        GNU Library General Public License v2.1
        GNU Library General Public License v3.0
        Mozilla Public License 2.0
        Apache v2.0
        MIT
        BSD-3-Clause
        Written Offer
        If you would like a copy of the GPL v2.0 source code contained in this product shipped on a DVD, you may obtain the complete Corresponding Source code from us for a period of three years after our last shipment of this product for a charge of 20$ no more than the cost of preparing and mailing a DVD to you. Please contact foss@volumio.org . This offer is valid to anyone in receipt of this information.

        '), e.put("app/themes/volumio3/components/add-track-to-playlist-btn/volumio3-add-track-to-playlist-btn.html",''),e.put("app/themes/volumio3/components/logo/volumio3-logo.html",'
        {{$select.selected.label}}
        '),e.put("app/themes/volumio3/components/main-menu/volumio3-main-menu.html",''),e.put("app/themes/volumio3/components/multi-room-dock/volumio3-multi-room-dock.html",'

        Multiroom devices

        {{device.name}}
        {{device.state.artist}}
        {{device.state.track}}
        '),e.put("app/themes/volumio3/components/modals/modal-ripper.html",''),e.put("app/themes/volumio3/components/player-buttons/volumio3-player-buttons.html",'
        '),e.put("app/themes/volumio3/components/on-cloud-actions/volumio3-on-cloud-actions.html",""),e.put("app/themes/volumio3/components/player-seekbar/volumio3-player-seekbar.html",'
        {{playerSeekBar.getElapsed()}}
        {{playerSeekBar.getDuration()}}
        {{playerSeekBar.getElapsed()}}
        {{playerSeekBar.getDuration()}}
        '),e.put("app/themes/volumio3/components/track-actions-btn/volumio3-track-actions-btn.html",''),e.put("app/themes/volumio3/components/track-info/volumio3-track-info.html",'
        {{trackInfo.playerService.state.title}}
        {{trackInfo.playerService.state.artist}}{{trackInfo.playerService.state.album}}
        {{trackInfo.playerService.state.album}}

        {{trackInfo.playerService.state.title}}

        {{trackInfo.playerService.state.artist}}
        {{trackInfo.playerService.state.album}}
        '),e.put("app/themes/volumio3/components/track-manager/volumio3-track-manager.html",'
        {{trackManager.playerService.state.album}}

        {{trackManager.playerService.state.title}}

        {{trackManager.playerService.state.artist}}
        {{trackManager.playerService.state.samplerate}} | {{trackManager.playerService.state.bitdepth}} {{trackManager.playerService.state.bitrate}}
        {{trackManager.playerService.elapsedTimeString}}
        {{trackManager.playerService.state.trackType}}
        {{trackManager.playerService.songLength}}
        {{trackManager.playerService.state.fileFormat.name}} {{trackManager.playerService.state.trackType}}
        '),e.put("app/themes/volumio3/components/volume-manager/volumio3-volume-manager.html",'
        {{volumeManager.playerService.volume}}
        /100
        {{volumeManager.playerService.getDbVolume()}}
        dB
        {{volumeManager.playerService.volume}}
        /100
        {{volumeManager.playerService.getDbVolume()}}
        dB
        '),e.put("app/components/myvolumio/components/shareds/already-logged/auth-already-logged.html",''),e.put("app/components/myvolumio/components/shareds/already-logged/myvolumio-already-logged.html",''),e.put("app/components/myvolumio/components/shareds/avatar-image/myvolumio-avatar-image.html",'
        '),e.put("app/components/myvolumio/components/shareds/back-button/myvolumio-back-button.html",' {{myVolumioBackButtonController.label}}'),e.put("app/components/myvolumio/components/shareds/current-plan-card/auth-current-plan-card.html",'

        {{myVolumioCurrentPlanCardController.user.plan || \'FREE\' | uppercase}}

        : {{myVolumioCurrentPlanCardController.getDate(myVolumioCurrentPlanCardController.user.expire_at) | date}}
        '),e.put("app/components/myvolumio/components/shareds/current-plan-card/myvolumio-current-plan-card.html",'

        {{myVolumioCurrentPlanCardController.user.plan || \'FREE\' | uppercase}}

        : {{myVolumioCurrentPlanCardController.getDate(myVolumioCurrentPlanCardController.user.expire_at) | date}} {{\'MYVOLUMIO.\'+myVolumioCurrentPlanCardController.getPlanDuration() | uppercase | translate}}
        '),e.put("app/components/myvolumio/components/shareds/growsurf-referral-card/growsurf-referral-card.html","
        "),e.put("app/components/myvolumio/components/shareds/plan-card/myvolumio-plan-card.html",'

        {{myVolumioPlanCardController.product.name}}

        {{myVolumioPlanCardController.getShownPrice()}}

        {{myVolumioPlanCardController.getShownPriceMessage()}}, {{myVolumioPlanCardController.getSaveMessage()}}

        {{myVolumioPlanCardController.getTrialDays()}} {{\'MYVOLUMIO.FREE_DAYS_TRIAL\' | translate}}

         {{feature | translate}}
        '), e.put("app/components/myvolumio/components/shareds/verification-card/auth-verification-card.html",'

        '),e.put("app/components/myvolumio/components/shareds/verification-card/myvolumio-verification-card.html",'

        '),e.put("app/themes/volumio/components/track-manager/elements/volumio-track-manager-button-bar.html",""),e.put("app/themes/volumio3/components/track-manager/elements/volumio3-track-manager-button-bar.html","")}]);