PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/home/theoceans.in/www/wp-content/plugins/wordpress-helpdesk/public/vendor/push-js/bin/
Upload File :
Current File : /home/theoceans.in/www/wp-content/plugins/wordpress-helpdesk/public/vendor/push-js/bin/push.js
/**
 * Push v1.0
 * =========
 * A compact, cross-browser solution for the JavaScript Notifications API
 *
 * Credits
 * -------
 * Tsvetan Tsvetkov (ttsvetko)
 * Alex Gibson (alexgibson)
 *
 * License
 * -------
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2015-2017 Tyler Nickerson
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
(function (global, factory) {
	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
	typeof define === 'function' && define.amd ? define(factory) :
	(global.Push = factory());
}(this, (function () { 'use strict';

function _typeof(obj) {
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function (obj) {
      return typeof obj;
    };
  } else {
    _typeof = function (obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}

function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
}

function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;
    Object.defineProperty(target, descriptor.key, descriptor);
  }
}

function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  return Constructor;
}

function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }

  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}

function _possibleConstructorReturn(self, call) {
  if (call && (typeof call === "object" || typeof call === "function")) {
    return call;
  }

  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}

var errorPrefix = 'PushError:';
var Messages = {
  errors: {
    incompatible: "".concat(errorPrefix, " Push.js is incompatible with browser."),
    invalid_plugin: "".concat(errorPrefix, " plugin class missing from plugin manifest (invalid plugin). Please check the documentation."),
    invalid_title: "".concat(errorPrefix, " title of notification must be a string"),
    permission_denied: "".concat(errorPrefix, " permission request declined"),
    sw_notification_error: "".concat(errorPrefix, " could not show a ServiceWorker notification due to the following reason: "),
    sw_registration_error: "".concat(errorPrefix, " could not register the ServiceWorker due to the following reason: "),
    unknown_interface: "".concat(errorPrefix, " unable to create notification: unknown interface")
  }
};

var Permission =
/*#__PURE__*/
function () {
  // Private members
  // Public members
  function Permission(win) {
    _classCallCheck(this, Permission);
    this._win = win;
    this.GRANTED = 'granted';
    this.DEFAULT = 'default';
    this.DENIED = 'denied';
    this._permissions = [this.GRANTED, this.DEFAULT, this.DENIED];
  }
  /**
  * Requests permission for desktop notifications
  * @param {Function} onGranted - Function to execute once permission is granted
  * @param {Function} onDenied - Function to execute once permission is denied
  * @return {void, Promise}
  */


  _createClass(Permission, [{
    key: "request",
    value: function request(onGranted, onDenied) {
      return arguments.length > 0 ? this._requestWithCallback.apply(this, arguments) : this._requestAsPromise();
    }
    /**
    * Old permissions implementation deprecated in favor of a promise based one
    * @deprecated Since V1.0.4
    * @param {Function} onGranted - Function to execute once permission is granted
    * @param {Function} onDenied - Function to execute once permission is denied
    * @return {void}
    */

  }, {
    key: "_requestWithCallback",
    value: function _requestWithCallback(onGranted, onDenied) {
      var _this = this;

      var existing = this.get();

      var resolve = function resolve() {
        var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this._win.Notification.permission;
        if (typeof result === 'undefined' && _this._win.webkitNotifications) result = _this._win.webkitNotifications.checkPermission();

        if (result === _this.GRANTED || result === 0) {
          if (onGranted) onGranted();
        } else if (onDenied) onDenied();
      };
      /* Permissions already set */


      if (existing !== this.DEFAULT) {
        resolve(existing);
      } else if (this._win.webkitNotifications && this._win.webkitNotifications.checkPermission) {
        /* Safari 6+, Legacy webkit browsers */
        this._win.webkitNotifications.requestPermission(resolve);
      } else if (this._win.Notification && this._win.Notification.requestPermission) {
        /* Chrome 23+ */
        this._win.Notification.requestPermission().then(resolve).catch(function () {
          if (onDenied) onDenied();
        });
      } else if (onGranted) {
        /* Let the user continue by default */
        onGranted();
      }
    }
    /**
    * Requests permission for desktop notifications in a promise based way
    * @return {Promise}
    */

  }, {
    key: "_requestAsPromise",
    value: function _requestAsPromise() {
      var _this2 = this;

      var existing = this.get();

      var isGranted = function isGranted(result) {
        return result === _this2.GRANTED || result === 0;
      };
      /* Permissions already set */


      var hasPermissions = existing !== this.DEFAULT;
      /* Safari 6+, Chrome 23+ */

      var isModernAPI = this._win.Notification && this._win.Notification.requestPermission;
      /* Legacy webkit browsers */

      var isWebkitAPI = this._win.webkitNotifications && this._win.webkitNotifications.checkPermission;
      return new Promise(function (resolvePromise, rejectPromise) {
        var resolver = function resolver(result) {
          return isGranted(result) ? resolvePromise() : rejectPromise();
        };

        if (hasPermissions) {
          resolver(existing);
        } else if (isWebkitAPI) {
          _this2._win.webkitNotifications.requestPermission(function (result) {
            resolver(result);
          });
        } else if (isModernAPI) {
          _this2._win.Notification.requestPermission().then(function (result) {
            resolver(result);
          }).catch(rejectPromise);
        } else resolvePromise();
      });
    }
    /**
    * Returns whether Push has been granted permission to run
    * @return {Boolean}
    */

  }, {
    key: "has",
    value: function has() {
      return this.get() === this.GRANTED;
    }
    /**
    * Gets the permission level
    * @return {Permission} The permission level
    */

  }, {
    key: "get",
    value: function get() {
      var permission;
      /* Safari 6+, Chrome 23+ */

      if (this._win.Notification && this._win.Notification.permission) permission = this._win.Notification.permission;else if (this._win.webkitNotifications && this._win.webkitNotifications.checkPermission)
        /* Legacy webkit browsers */
        permission = this._permissions[this._win.webkitNotifications.checkPermission()];else if (navigator.mozNotification)
        /* Firefox Mobile */
        permission = this.GRANTED;else if (this._win.external && this._win.external.msIsSiteMode)
        /* IE9+ */
        permission = this._win.external.msIsSiteMode() ? this.GRANTED : this.DEFAULT;else permission = this.GRANTED;
      return permission;
    }
  }]);
  return Permission;
}();

var Util =
/*#__PURE__*/
function () {
  function Util() {
    _classCallCheck(this, Util);
  }

  _createClass(Util, null, [{
    key: "isUndefined",
    value: function isUndefined(obj) {
      return obj === undefined;
    }
  }, {
    key: "isNull",
    value: function isNull(obs) {
      return obj === null;
    }
  }, {
    key: "isString",
    value: function isString(obj) {
      return typeof obj === 'string';
    }
  }, {
    key: "isFunction",
    value: function isFunction(obj) {
      return obj && {}.toString.call(obj) === '[object Function]';
    }
  }, {
    key: "isObject",
    value: function isObject(obj) {
      return _typeof(obj) === 'object';
    }
  }, {
    key: "objectMerge",
    value: function objectMerge(target, source) {
      for (var key in source) {
        if (target.hasOwnProperty(key) && this.isObject(target[key]) && this.isObject(source[key])) {
          this.objectMerge(target[key], source[key]);
        } else {
          target[key] = source[key];
        }
      }
    }
  }]);
  return Util;
}();

var AbstractAgent = function AbstractAgent(win) {
  _classCallCheck(this, AbstractAgent);
  this._win = win;
};

/**
 * Notification agent for modern desktop browsers:
 * Safari 6+, Firefox 22+, Chrome 22+, Opera 25+
 */
var DesktopAgent$$1 =
/*#__PURE__*/
function (_AbstractAgent) {
  _inherits(DesktopAgent$$1, _AbstractAgent);

  function DesktopAgent$$1() {
    _classCallCheck(this, DesktopAgent$$1);
    return _possibleConstructorReturn(this, (DesktopAgent$$1.__proto__ || Object.getPrototypeOf(DesktopAgent$$1)).apply(this, arguments));
  }

  _createClass(DesktopAgent$$1, [{
    key: "isSupported",

    /**
     * Returns a boolean denoting support
     * @returns {Boolean} boolean denoting whether webkit notifications are supported
     */
    value: function isSupported() {
      return this._win.Notification !== undefined;
    }
    /**
     * Creates a new notification
     * @param title - notification title
     * @param options - notification options array
     * @returns {Notification}
     */

  }, {
    key: "create",
    value: function create(title, options) {
      return new this._win.Notification(title, {
        icon: Util.isString(options.icon) || Util.isUndefined(options.icon) || Util.isNull(options.icon) ? options.icon : options.icon.x32,
        body: options.body,
        tag: options.tag,
        requireInteraction: options.requireInteraction
      });
    }
    /**
     * Close a given notification
     * @param notification - notification to close
     */

  }, {
    key: "close",
    value: function close(notification) {
      notification.close();
    }
  }]);
  return DesktopAgent$$1;
}(AbstractAgent);

/**
 * Notification agent for modern desktop browsers:
 * Safari 6+, Firefox 22+, Chrome 22+, Opera 25+
 */
var MobileChromeAgent$$1 =
/*#__PURE__*/
function (_AbstractAgent) {
  _inherits(MobileChromeAgent$$1, _AbstractAgent);

  function MobileChromeAgent$$1() {
    _classCallCheck(this, MobileChromeAgent$$1);
    return _possibleConstructorReturn(this, (MobileChromeAgent$$1.__proto__ || Object.getPrototypeOf(MobileChromeAgent$$1)).apply(this, arguments));
  }

  _createClass(MobileChromeAgent$$1, [{
    key: "isSupported",

    /**
     * Returns a boolean denoting support
     * @returns {Boolean} boolean denoting whether webkit notifications are supported
     */
    value: function isSupported() {
      return this._win.navigator !== undefined && this._win.navigator.serviceWorker !== undefined;
    }
    /**
     * Returns the function body as a string
     * @param func
     */

  }, {
    key: "getFunctionBody",
    value: function getFunctionBody(func) {
      var str = func.toString().match(/function[^{]+{([\s\S]*)}$/);
      return typeof str !== 'undefined' && str !== null && str.length > 1 ? str[1] : null;
    }
    /**
     * Creates a new notification
     * @param id                ID of notification
     * @param title             Title of notification
     * @param options           Options object
     * @param serviceWorker     ServiceWorker path
     * @param callback          Callback function
     */

  }, {
    key: "create",
    value: function create(id, title, options, serviceWorker, callback) {
      var _this = this;

      /* Register ServiceWorker */
      this._win.navigator.serviceWorker.register(serviceWorker);

      this._win.navigator.serviceWorker.ready.then(function (registration) {
        /* Local data the service worker will use */
        var localData = {
          id: id,
          link: options.link,
          origin: document.location.href,
          onClick: Util.isFunction(options.onClick) ? _this.getFunctionBody(options.onClick) : '',
          onClose: Util.isFunction(options.onClose) ? _this.getFunctionBody(options.onClose) : ''
        };
        /* Merge the local data with user-provided data */

        if (options.data !== undefined && options.data !== null) localData = Object.assign(localData, options.data);
        /* Show the notification */

        registration.showNotification(title, {
          icon: options.icon,
          body: options.body,
          vibrate: options.vibrate,
          tag: options.tag,
          data: localData,
          requireInteraction: options.requireInteraction,
          silent: options.silent
        }).then(function () {
          registration.getNotifications().then(function (notifications) {
            /* Send an empty message so the ServiceWorker knows who the client is */
            registration.active.postMessage('');
            /* Trigger callback */

            callback(notifications);
          });
        }).catch(function (error) {
          throw new Error(Messages.errors.sw_notification_error + error.message);
        });
      }).catch(function (error) {
        throw new Error(Messages.errors.sw_registration_error + error.message);
      });
    }
    /**
     * Close all notification
     */

  }, {
    key: "close",
    value: function close() {// Can't do this with service workers
    }
  }]);
  return MobileChromeAgent$$1;
}(AbstractAgent);

/**
 * Notification agent for modern desktop browsers:
 * Safari 6+, Firefox 22+, Chrome 22+, Opera 25+
 */
var MobileFirefoxAgent$$1 =
/*#__PURE__*/
function (_AbstractAgent) {
  _inherits(MobileFirefoxAgent$$1, _AbstractAgent);

  function MobileFirefoxAgent$$1() {
    _classCallCheck(this, MobileFirefoxAgent$$1);
    return _possibleConstructorReturn(this, (MobileFirefoxAgent$$1.__proto__ || Object.getPrototypeOf(MobileFirefoxAgent$$1)).apply(this, arguments));
  }

  _createClass(MobileFirefoxAgent$$1, [{
    key: "isSupported",

    /**
     * Returns a boolean denoting support
     * @returns {Boolean} boolean denoting whether webkit notifications are supported
     */
    value: function isSupported() {
      return this._win.navigator.mozNotification !== undefined;
    }
    /**
     * Creates a new notification
     * @param title - notification title
     * @param options - notification options array
     * @returns {Notification}
     */

  }, {
    key: "create",
    value: function create(title, options) {
      var notification = this._win.navigator.mozNotification.createNotification(title, options.body, options.icon);

      notification.show();
      return notification;
    }
  }]);
  return MobileFirefoxAgent$$1;
}(AbstractAgent);

/**
 * Notification agent for IE9
 */
var MSAgent$$1 =
/*#__PURE__*/
function (_AbstractAgent) {
  _inherits(MSAgent$$1, _AbstractAgent);

  function MSAgent$$1() {
    _classCallCheck(this, MSAgent$$1);
    return _possibleConstructorReturn(this, (MSAgent$$1.__proto__ || Object.getPrototypeOf(MSAgent$$1)).apply(this, arguments));
  }

  _createClass(MSAgent$$1, [{
    key: "isSupported",

    /**
     * Returns a boolean denoting support
     * @returns {Boolean} boolean denoting whether webkit notifications are supported
     */
    value: function isSupported() {
      return this._win.external !== undefined && this._win.external.msIsSiteMode !== undefined;
    }
    /**
     * Creates a new notification
     * @param title - notification title
     * @param options - notification options array
     * @returns {Notification}
     */

  }, {
    key: "create",
    value: function create(title, options) {
      /* Clear any previous notifications */
      this._win.external.msSiteModeClearIconOverlay();

      this._win.external.msSiteModeSetIconOverlay(Util.isString(options.icon) || Util.isUndefined(options.icon) ? options.icon : options.icon.x16, title);

      this._win.external.msSiteModeActivate();

      return null;
    }
    /**
     * Close a given notification
     * @param notification - notification to close
     */

  }, {
    key: "close",
    value: function close() {
      this._win.external.msSiteModeClearIconOverlay();
    }
  }]);
  return MSAgent$$1;
}(AbstractAgent);

/**
 * Notification agent for old Chrome versions (and some) Firefox
 */
var WebKitAgent$$1 =
/*#__PURE__*/
function (_AbstractAgent) {
  _inherits(WebKitAgent$$1, _AbstractAgent);

  function WebKitAgent$$1() {
    _classCallCheck(this, WebKitAgent$$1);
    return _possibleConstructorReturn(this, (WebKitAgent$$1.__proto__ || Object.getPrototypeOf(WebKitAgent$$1)).apply(this, arguments));
  }

  _createClass(WebKitAgent$$1, [{
    key: "isSupported",

    /**
     * Returns a boolean denoting support
     * @returns {Boolean} boolean denoting whether webkit notifications are supported
     */
    value: function isSupported() {
      return this._win.webkitNotifications !== undefined;
    }
    /**
     * Creates a new notification
     * @param title - notification title
     * @param options - notification options array
     * @returns {Notification}
     */

  }, {
    key: "create",
    value: function create(title, options) {
      var notification = this._win.webkitNotifications.createNotification(options.icon, title, options.body);

      notification.show();
      return notification;
    }
    /**
     * Close a given notification
     * @param notification - notification to close
     */

  }, {
    key: "close",
    value: function close(notification) {
      notification.cancel();
    }
  }]);
  return WebKitAgent$$1;
}(AbstractAgent);

var Push$$1 =
/*#__PURE__*/
function () {
  // Private members
  // Public members
  function Push$$1(win) {
    _classCallCheck(this, Push$$1);

    /* Private variables */

    /* ID to use for new notifications */
    this._currentId = 0;
    /* Map of open notifications */

    this._notifications = {};
    /* Window object */

    this._win = win;
    /* Public variables */

    this.Permission = new Permission(win);
    /* Agents */

    this._agents = {
      desktop: new DesktopAgent$$1(win),
      chrome: new MobileChromeAgent$$1(win),
      firefox: new MobileFirefoxAgent$$1(win),
      ms: new MSAgent$$1(win),
      webkit: new WebKitAgent$$1(win)
    };
    this._configuration = {
      serviceWorker: '/serviceWorker.min.js',
      fallback: function fallback(payload) {}
    };
  }
  /**
   * Closes a notification
   * @param id            ID of notification
   * @returns {boolean}   denotes whether the operation was successful
   * @private
   */


  _createClass(Push$$1, [{
    key: "_closeNotification",
    value: function _closeNotification(id) {
      var success = true;
      var notification = this._notifications[id];

      if (notification !== undefined) {
        success = this._removeNotification(id);
        /* Safari 6+, Firefox 22+, Chrome 22+, Opera 25+ */

        if (this._agents.desktop.isSupported()) this._agents.desktop.close(notification);else if (this._agents.webkit.isSupported())
          /* Legacy WebKit browsers */
          this._agents.webkit.close(notification);else if (this._agents.ms.isSupported())
          /* IE9 */
          this._agents.ms.close();else {
          success = false;
          throw new Error(Messages.errors.unknown_interface);
        }
        return success;
      }

      return false;
    }
    /**
    * Adds a notification to the global dictionary of notifications
    * @param {Notification} notification
    * @return {Integer} Dictionary key of the notification
    * @private
    */

  }, {
    key: "_addNotification",
    value: function _addNotification(notification) {
      var id = this._currentId;
      this._notifications[id] = notification;
      this._currentId++;
      return id;
    }
    /**
    * Removes a notification with the given ID
    * @param  {Integer} id - Dictionary key/ID of the notification to remove
    * @return {Boolean} boolean denoting success
    * @private
    */

  }, {
    key: "_removeNotification",
    value: function _removeNotification(id) {
      var success = false;

      if (this._notifications.hasOwnProperty(id)) {
        /* We're successful if we omit the given ID from the new array */
        delete this._notifications[id];
        success = true;
      }

      return success;
    }
    /**
    * Creates the wrapper for a given notification
    *
    * @param {Integer} id - Dictionary key/ID of the notification
    * @param {Map} options - Options used to create the notification
    * @returns {Map} wrapper hashmap object
    * @private
    */

  }, {
    key: "_prepareNotification",
    value: function _prepareNotification(id, options) {
      var _this = this;

      var wrapper;
      /* Wrapper used to get/close notification later on */

      wrapper = {
        get: function get() {
          return _this._notifications[id];
        },
        close: function close() {
          _this._closeNotification(id);
        }
      };
      /* Autoclose timeout */

      if (options.timeout) {
        setTimeout(function () {
          wrapper.close();
        }, options.timeout);
      }

      return wrapper;
    }
    /**
    * Find the most recent notification from a ServiceWorker and add it to the global array
    * @param notifications
    * @private
    */

  }, {
    key: "_serviceWorkerCallback",
    value: function _serviceWorkerCallback(notifications, options, resolve) {
      var _this2 = this;

      var id = this._addNotification(notifications[notifications.length - 1]);
      /* Listen for close requests from the ServiceWorker */


      if (navigator && navigator.serviceWorker) {
        navigator.serviceWorker.addEventListener('message', function (event) {
          var data = JSON.parse(event.data);
          if (data.action === 'close' && Number.isInteger(data.id)) _this2._removeNotification(data.id);
        });
        resolve(this._prepareNotification(id, options));
      }

      resolve(null);
    }
    /**
    * Callback function for the 'create' method
    * @return {void}
    * @private
    */

  }, {
    key: "_createCallback",
    value: function _createCallback(title, options, resolve) {
      var _this3 = this;

      var notification = null;
      var onClose;
      /* Set empty settings if none are specified */

      options = options || {};
      /* onClose event handler */

      onClose = function onClose(id) {
        /* A bit redundant, but covers the cases when close() isn't explicitly called */
        _this3._removeNotification(id);

        if (Util.isFunction(options.onClose)) {
          options.onClose.call(_this3, notification);
        }
      };
      /* Safari 6+, Firefox 22+, Chrome 22+, Opera 25+ */


      if (this._agents.desktop.isSupported()) {
        try {
          /* Create a notification using the API if possible */
          notification = this._agents.desktop.create(title, options);
        } catch (e) {
          var id = this._currentId;
          var sw = this.config().serviceWorker;

          var cb = function cb(notifications) {
            return _this3._serviceWorkerCallback(notifications, options, resolve);
          };
          /* Create a Chrome ServiceWorker notification if it isn't supported */


          if (this._agents.chrome.isSupported()) {
            this._agents.chrome.create(id, title, options, sw, cb);
          }
        }
        /* Legacy WebKit browsers */

      } else if (this._agents.webkit.isSupported()) notification = this._agents.webkit.create(title, options);else if (this._agents.firefox.isSupported())
        /* Firefox Mobile */
        this._agents.firefox.create(title, options);else if (this._agents.ms.isSupported())
        /* IE9 */
        notification = this._agents.ms.create(title, options);else {
        /* Default fallback */
        options.title = title;
        this.config().fallback(options);
      }

      if (notification !== null) {
        var _id = this._addNotification(notification);

        var wrapper = this._prepareNotification(_id, options);
        /* Notification callbacks */


        if (Util.isFunction(options.onShow)) notification.addEventListener('show', options.onShow);
        if (Util.isFunction(options.onError)) notification.addEventListener('error', options.onError);
        if (Util.isFunction(options.onClick)) notification.addEventListener('click', options.onClick);
        notification.addEventListener('close', function () {
          onClose(_id);
        });
        notification.addEventListener('cancel', function () {
          onClose(_id);
        });
        /* Return the wrapper so the user can call close() */

        resolve(wrapper);
      }
      /* By default, pass an empty wrapper */


      resolve(null);
    }
    /**
    * Creates and displays a new notification
    * @param {Array} options
    * @return {Promise}
    */

  }, {
    key: "create",
    value: function create(title, options) {
      var _this4 = this;

      var promiseCallback;
      /* Fail if no or an invalid title is provided */

      if (!Util.isString(title)) {
        throw new Error(Messages.errors.invalid_title);
      }
      /* Request permission if it isn't granted */


      if (!this.Permission.has()) {
        promiseCallback = function promiseCallback(resolve, reject) {
          _this4.Permission.request().then(function () {
            _this4._createCallback(title, options, resolve);
          }).catch(function () {
            reject(Messages.errors.permission_denied);
          });
        };
      } else {
        promiseCallback = function promiseCallback(resolve, reject) {
          try {
            _this4._createCallback(title, options, resolve);
          } catch (e) {
            reject(e);
          }
        };
      }

      return new Promise(promiseCallback);
    }
    /**
    * Returns the notification count
    * @return {Integer} The notification count
    */

  }, {
    key: "count",
    value: function count() {
      var count = 0;
      var key;

      for (key in this._notifications) {
        if (this._notifications.hasOwnProperty(key)) count++;
      }

      return count;
    }
    /**
    * Closes a notification with the given tag
    * @param {String} tag - Tag of the notification to close
    * @return {Boolean} boolean denoting success
    */

  }, {
    key: "close",
    value: function close(tag) {
      var key, notification;

      for (key in this._notifications) {
        if (this._notifications.hasOwnProperty(key)) {
          notification = this._notifications[key];
          /* Run only if the tags match */

          if (notification.tag === tag) {
            /* Call the notification's close() method */
            return this._closeNotification(key);
          }
        }
      }
    }
    /**
    * Clears all notifications
    * @return {Boolean} boolean denoting whether the clear was successful in closing all notifications
    */

  }, {
    key: "clear",
    value: function clear() {
      var key,
          success = true;

      for (key in this._notifications) {
        if (this._notifications.hasOwnProperty(key)) success = success && this._closeNotification(key);
      }

      return success;
    }
    /**
    * Denotes whether Push is supported in the current browser
    * @returns {boolean}
    */

  }, {
    key: "supported",
    value: function supported() {
      var supported = false;

      for (var agent in this._agents) {
        if (this._agents.hasOwnProperty(agent)) supported = supported || this._agents[agent].isSupported();
      }

      return supported;
    }
    /**
    * Modifies settings or returns all settings if no parameter passed
    * @param settings
    */

  }, {
    key: "config",
    value: function config(settings) {
      if (typeof settings !== 'undefined' || settings !== null && Util.isObject(settings)) Util.objectMerge(this._configuration, settings);
      return this._configuration;
    }
    /**
    * Copies the functions from a plugin to the main library
    * @param plugin
    */

  }, {
    key: "extend",
    value: function extend(manifest) {
      var plugin,
          Plugin,
          hasProp = {}.hasOwnProperty;

      if (!hasProp.call(manifest, 'plugin')) {
        throw new Error(Messages.errors.invalid_plugin);
      } else {
        if (hasProp.call(manifest, 'config') && Util.isObject(manifest.config) && manifest.config !== null) {
          this.config(manifest.config);
        }

        Plugin = manifest.plugin;
        plugin = new Plugin(this.config());

        for (var member in plugin) {
          if (hasProp.call(plugin, member) && Util.isFunction(plugin[member])) // $FlowFixMe
            this[member] = plugin[member];
        }
      }
    }
  }]);
  return Push$$1;
}();

var index = new Push$$1(typeof window !== 'undefined' ? window : global);

return index;

})));
//# sourceMappingURL=push.js.map